文章目录 进程 Process Lock Semaphore 信号量 Evnet 事件 Queue 队列 Pipe 管道 Pool 进程池 apply 单个任务 - 阻塞 apply_async 单个任务 - 不阻塞 apply_async 单个任务,不阻塞,纪录返回值 map 多个任务 - 阻塞 map 多个任务 - 不阻塞 map 多任务 - 不阻塞 - 纪录返回值 进程 # coding=utf-8 # 进程线程安全的方式 lock = Lock() lock.acquire() try: pass finally: lock.release() Process # coding=utf-8 from multiprocess import Process def foo(name): print name if __name__ == '__main__': p = Process(target=foo, args=('xx',)) p.start() # 开启进程 p.join() # 进程等待,主进程等待子进程结束在往下执行 Lock 当多个进程访问同一个资源的时候使用,Lock可以用来避免访问的冲突。 比如文件的读取 # coding=utf-8 from multiprocessing import Process, Lock def f(l, i): l.acquire() try: print('hello world', i) finally: l.release() if __name__ == '__main__': lock = Lock() for num in range(10): Process(target=f, args=(lock, num)).start() Semaphore 信号量 Semaphore用来控制对共享资源的访问数量,例如池的最大连接数。 下面这种情况不会一次性开启所有的进程,信号量满了以后需要释放才能在执行程序 # coding=utf-8 from multiprocessing import Process, Semaphore import time def f(s, i): s.acquire() print i time