Python 版本 3.4.2 ,主进程内的定义了一个 RabbitMQ 连接,变量为 connection ,保存了该链接的句柄。
我需要在四个子进程内分别使用这个句柄的方法,但是报错:
Can't pickle : attribute lookup lock on _thread failed
Google 搜索结果都是建议使用 multiprocessing.Queue 来进行进程间通讯,但是看起来不能满足我的需求。请问大家对于这种子进程共享父进程内的变量(句柄)是怎么处理的呢?
代码如下
from multiprocessing import Pool
import os, time, random, sys, pika
def long_time_task(rabbitmq_handle):
def e_c(e):
print(e)
if __name__=='__main__':
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='172.17.0.9'))
p = Pool()
for i in range(5):
p.apply_async(long_time_task, args=( connection, ), error_callback=e_c)
print( 'Waiting for all subprocesses done...')
p.close()
p.join()
print( 'All subprocesses done.')