Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq 如何在reactor中使用并行代码确认芹菜任务?_Rabbitmq_Message Queue_Celery_Reactor - Fatal编程技术网

Rabbitmq 如何在reactor中使用并行代码确认芹菜任务?

Rabbitmq 如何在reactor中使用并行代码确认芹菜任务?,rabbitmq,message-queue,celery,reactor,Rabbitmq,Message Queue,Celery,Reactor,我有一个芹菜任务,当调用它时,它只是在一个扭曲的反应器中触发一些并行代码的执行。下面是一些示例(不可运行)代码来说明: def run_task_in_reactor(): # this takes a while to run do_something() do_something_more() @celery.task def run_task(): print "Started reactor" reactor.callFromThread(run_tas

我有一个芹菜任务,当调用它时,它只是在一个扭曲的反应器中触发一些并行代码的执行。下面是一些示例(不可运行)代码来说明:

def run_task_in_reactor():
   # this takes a while to run
   do_something()
   do_something_more()


@celery.task
def run_task():
   print "Started reactor"
   reactor.callFromThread(run_task_in_reactor)
(为了简单起见,请假设当工作者收到任务时反应器已经在运行;我使用信号
@worker\u process\u init.connect
在工作者出现时在另一个线程中启动我的反应器)

当我调用
run\u task.delay()
时,任务会很快完成(因为它不会等待
run\u task\u in_reactor()
完成,只会安排它在reactor中的执行)。而且,当
run\u task\u in_reactor()
最终运行时,
do\u something()
do\u something\u more()
会抛出一个异常,该异常不会被注意到

使用
pika
从我的队列中消费,我可以在
do\u more()
中使用ACK来通知工作人员任务的正确完成。然而,在芹菜里面,这似乎是不可能的(或者,至少,我不知道如何达到同样的效果)


此外,我不能移除反应堆,因为这是我正在使用的某些第三方代码的要求。实现相同结果的其他方法也值得赞赏。

使用
reactor。改为阻止来自线程的调用。

请解释在何处以及如何使用它,甚至包括question@MauricioGracia它实际上只是
reactor.blockingCallFromThread
而不是问题代码中的
reactor.callFromThread