我在一台计算机上安装了django REST API(目前正在本地计算机上进行测试,但最终将在Web服务器上)。我们称这台机器为“客户端”。我还有一台运行CPU密集型任务的计算服务器,需要很长的执行时间。我们称这台机器为“run-server”。
“run-server”运行连接到本地rabbitmq服务器的芹菜工作者。该工作程序当前处于具有此结构的git模块中:
proj/
client.py
cmd.sh
requirements.txt
tasks.py
整个事情在一个虚拟实现中运行它的价值。 cmd.sh
基本上在“run-server”上执行celery multi start workername -A tasks -l info
。 client.py
是一个cli脚本,可以从任何机器(即“客户端”)从shell手动向“运行服务器”提交任务。
我想从django setup 运行等效的客户端脚本,而不得不复制django存储库中的tasks.py
和client.py
代码。理想情况下,我会从django代码中pip install proj
并导入项目,就像客户端脚本一样使用它。
如何打包proj来实现这一目标?
我习惯打包我自己的python模块,其结构大致如下:
proj/
bin/
proj
proj/
__init__.py
__main__.py
script.py
setup.py
requirements.txt
答案 0 :(得分:0)
我设法让它自己工作。上面的结构才有效。您只需替换为celery multi start workername -A tasks -l info
,而不是celery multi start workername -A proj.tasks -l info
,一切正常。必须在django和worker中安装相同版本的模块,因为作业队列是通过duck-typing完成的(即路径和名称必须匹配)