gpt4 book ai didi

Python Gearman 从后台任务中获取数据

转载 作者:行者123 更新时间:2023-11-28 17:52:01 24 4
gpt4 key购买 nike

我正在尝试将 gearman 用于后台任务并从 worker 获取数据进度。在文档中我看到了方法:send_job_data 和 send_job_status,但是后台优先方法不起作用(我没有在 job.data_updates 中看到数据),但是 job.status 中的状态发生了变化。

我将此代码用于测试人员: 从 gearman 导入 GearmanWorker 导入时间

worker = GearmanWorker(['192.168.1.79:4730'])

def long_task(work, job):
work.send_job_data(job, 'long task')
work.send_job_status(job, 0, 3)
time.sleep(60)
work.send_job_data(job, 'long task2')
work.send_job_status(job, 1,3)
time.sleep(120)
work.send_job_status(job,3,3)
return "COMPLETE ALL"

worker.register_task('pool', long_task)
worker.work()

来自客户端的这段代码: 从 gearman 导入 GearmanClient client = GearmanClient(['192.168.1.79:4730'])

此代码(阻塞)工作正常:

In [6]: pool = client.submit_job('pool', '')
In [7]: pool.result
Out[7]: 'COMPLETE ALL'
In [8]: pool.data_updates
Out[8]: deque(['long task', 'long task2'])
In [9]: pool.status
Out[9]:
{'denominator': 3,
'handle': 'H:dhcp94:22',
'known': True,
'numerator': 3,
'running': True,
'time_received': 1322755490.691739}

并且此客户端无法正常工作(不更新任务状态并且不获取数据/结果):(

In [10]: pool = client.submit_job('pool', '', background=True)
In [11]: pool = client.get_job_status(pool)
In [12]: pool.status
Out[12]:
{'denominator': 3,
'handle': 'H:dhcp94:23',
'known': True,
'numerator': 0,
'running': True,
'time_received': 1322755604.695123}
In [13]: pool.data_updates
Out[13]: deque([])

In [14]: pool = client.get_job_status(pool)
In [15]: pool.data_updates
Out[15]: deque([])
In [16]: pool.status
Out[16]:
{'denominator': 0,
'handle': 'H:dhcp94:23',
'known': False,
'numerator': 0,
'running': False,
'time_received': 1322755863.306605}

我怎么才能正常得到这些数据呢?因为我的后台任务会工作几个小时,并在消息中发送有关我们状态的信息。

最佳答案

后台任务之所以这样称呼是因为它们允许提交它们的客户端解除阻塞并在断开连接的情况下工作。他们不会为客户保持开放的沟通 channel ,因此您不会获得任何这些状态更新。他们基本上进入了位桶。如果您希望后台任务传达其进度,您需要有一些其他 channel 让它与感兴趣的程序进行交流。

如果您希望客户端继续运行并获取更新,但不阻塞它们,您可以使用“任务”方法,在其中添加一堆任务,然后等待其中任何一个提供状态或完成.我不确定纯 python gearman 接口(interface)是否有这个,但 libgearman 接口(interface)有。此处提供源代码形式 https://launchpad.net/gearman-interface或者在某些版本的 Ubuntu/Debian 中作为 python-gearman.libgearman。

关于Python Gearman 从后台任务中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8344561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com