celery cluser redis_关于redis+celery

有一个想法,在flask的web界面中编辑代码,然后传入参数,把这个task扔进celery中执行。

celery中动态import写好的模块,在client传进celery的broker时,带入模块名和路径(或者路径写死)以及其他参数。

task的代码:

# celery task的代码

from celery import Celery

import imp

import sys

app = Celery('tasks', broker='redis://192.168.99.100:32787/0', backend='redis://192.168.99.100:32787/1')

def load(module_name, module_path):

fp, pathname, desctiption = imp.find_module(module_name, path=[module_path])

try:

return imp.load_module(module_name, fp, pathname, desctiption)

finally:

if fp:

fp.close()

@app.task

def import_module(module_name, module_path):

# return module_name

if module_name not in sys.modules:

do = load(module_name, module_path)

a = 1

else:

do = sys.modules[module_name]

a = 2

return do.test(), a

##############################################################

#client的代码:

for i in range(10):

result = import_module.delay('code', r"C:\Users\user\PycharmProjects\pandas_mongodb_test")

result.ready()

print(result.get())

测试成功!

然后发现一个有趣的玩意儿,在启动celery时,默认4个进程,然后收到4个任务以后,4个进程都会加载完module,当第五个任务进来时,4个进程因为都已经import完module了,所以可以直接从sys.modules中找到动态import的module

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值