1.GIL
锁
在大多数系统上,python同时支持消息传递和基于线程的并发编程。但实际上python的线程受限很多,为了最大程度保护线程的安全,Python使用了全局解释器锁(Global Interpreter Lock),在任意指定时刻只允许单个线程运行。
2.code
import multiprocessing
def consumer(input_q):
while True:
#q.get()返回q中一个项,如果q为空,此方法将阻塞,直到队列中有项可用为止
item=input_q.get()
print(item)
#消费者使用此方法发出信号,表示q.get()返回的项已经被处理完毕。
input_q.task_done()
def producer(sequence,output_q):
for item in sequence:
#将项放入队列
output_q.put(item)
if __name__=='__main__':
q=multiprocessing.JoinableQueue()
'''''consumer processing'''
consumer_p=multiprocessing.Process(target=consumer,args=(q,))
consumer_p.daemon=True
consumer_p.start()
'''''producing many Queues,run producer'''
sequence=[1,2,3,4,5]
producer(sequence,q)
'''''waiting processing'''
q.join()
JoinablQueue
:调用方法multiprocess.JoinableQueue()
创建可连接的共享进程队列。如同一个队列数据,通知一个队列另一个队列的完成情况。通知进程是使用共享的信号和条件变量实现的。
在本实例中,首先使用producer 函数将处理项放入q=multiprocessing.JionableQueue()队列中 ,然后调用consumer函数,使用q.get()获取 队列,并发出信号通知生产者任务完成