Python的multiprocessing :
Python的该库是产生多个进程,首先什么是进程?进程有着自己的线程集合和资源集合。所以将multiprocessing.Queue 放在全局变量,是不起作用的, 两个进程会分别拷贝一份到自己的资源块内, 分别执行。
import time, os, socket import multiprocessing
# import Queue
# q = Queue.Queue(maxsize = 100) q = multiprocessing.Queue()
def Aet(): print 'Aet...' global q host = '125.216.241.**' port = 8001 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print '---1' s.bind((host, port)) print '---2' s.listen(1) print '---3' conn, addr = s.accept() print 'begin.....' while 1: data = conn.recv(1024) if not data: break print 'I have recv: ', data q.put(data) print 'q size is: ', q.qsize() conn.close()
def Write(): print 'Write....' global q
while 1: if q.empty(): time.sleep(3) print 'eeeeeee' else: data = q.get() print 'haha..., this is: ', data
if __name__ == '__main__': thread = [Aet, Write] pool = multiprocessing.Pool(processes=2) for th in thread: pool.apply_async(th) pool.close() pool.join() print 'the end...'