图片是celery日志。
from multiprocessing import Pool
import os, time, random
def long_time_task(name):
print('Run task %s (%s)...' % (name, os.getpid()))
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
try:
print 'aaa:%s' % aaa
except:
pass
print('Task %s runs %0.2f seconds.' % (name, (end - start)))
def mptest():
print('Parent process %s.' % os.getpid())
p = Pool(8)
global aaa
aaa = 456
for i in range(5):
p.apply_async(long_time_task, args=(i,))
print('Waiting for all subprocesses done...')
p.close()
p.join()
print('All subprocesses done.')
if __name__=='__main__':
mptest()
如上代码,我在mptest里声明一个全局变量aaa,然后启动5个进程去读取aaa是读取不到的,这个很好理解,因为进程间数据不能这样共享。
但是,我把上面代码中mptest函数作为celery的任务运行,在celery worker中同样是启动5个新的进程去读取aaa,是可以读取到的,不知道老师是否了解这是什么原因?我查了celery的好多资料,都没有找到相关说明。。。
登录后可查看更多问答,登录/注册