<p>我在寻找类似问题的解决方案时发现了你的问题。这就是我最后要做的。我使用RabbitMQ作为代理,使用Redis作为结果后端,但请根据您的情况进行调整:</p>
<p>文件<strong>obcl/对象</strong>:</p>
<pre><code>class ObCl(object):
def __init__(self):
self.val = 0
def add(self, add_val):
self.val += add_val
return self.val
def mult(self, mult_val):
self.val *= mult_val
return self.val
</code></pre>
<p>文件<strong>obcl/obcl_任务.py</strong>:</p>
^{pr2}$
<p>从obcl模块的父文件夹运行芹菜。请确保使用<code> concurrency=1</code>,这样您就只有一个实例工作进程来控制您的硬件。公司名称:</p>
<pre><code>celery -A obcl.obcl_tasks worker pool=solo concurrency=1 loglevel=info
celery@localhost v4.2.2 (windowlicker)
**** -
- * *** * Linux-4.18.0-16-generic-x86_64-with-Ubuntu-18.04-bionic 2019-03-24 17:10:03
* - **** -
- ** [config]
- ** .> app: obcl_tasks:0x7f443c0bc5c0
- ** .> transport: amqp://guest:**@localhost:5672//
- ** .> results: redis://localhost/
- *** - * - .> concurrency: 1 (solo)
******* .> task events: OFF (enable -E to monitor tasks in this worker)
- ***** -
[queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. obcl.obcl_tasks.add
. obcl.obcl_tasks.mult
[2019-03-24 17:10:03,041: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2019-03-24 17:10:03,049: INFO/MainProcess] mingle: searching for neighbors
[2019-03-24 17:10:04,070: INFO/MainProcess] mingle: all alone
[2019-03-24 17:10:04,086: INFO/MainProcess] celery@localhost ready.
</code></pre>
<p>现在,您可以调用您的任务,并应获得预期的结果。在</p>
<pre><code>Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from obcl.obcl_tasks import add, mult
>>> test = add.delay(5)
>>> test.result
5
>>> test = add.delay(5)
>>> test.result
10
>>> test = mult.delay(2)
>>> test.result
20
>>> test = mult.delay(2)
>>> test.result
40
</code></pre>