有一個想法处铛,在flask的web界面中編輯代碼,然后傳入?yún)?shù)洲愤,把這個task扔進celery中執(zhí)行摇幻。
celery中動態(tài)import寫好的模塊横侦,在client傳進celery的broker時挥萌,帶入模塊名和路徑(或者路徑寫死)以及其他參數(shù)。
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())
測試成功枉侧!
然后發(fā)現(xiàn)一個有趣的玩意兒引瀑,在啟動celery時,默認4個進程榨馁,然后收到4個任務(wù)以后憨栽,4個進程都會加載完module,當?shù)谖鍌€任務(wù)進來時翼虫,4個進程因為都已經(jīng)import完module了屑柔,所以可以直接從sys.modules中找到動態(tài)import的module