模块 multiprocessing*
线程之间共享内存,进程之间内存独立
from multiprocessing import Process
import time
import threading
def Threads():
print(threading.get_ident())
#time.sleep(2)
def run(conn):
print("from child process",conn)
#time.sleep(2)
t = threading.Thread(target=Threads,)
t.start()
if __name__ == '__main__':
for i in range(20):
p = Process(target=run,args=(i,))
p.start()
进程之间的数据传递*
- multiprocessing.Queue() 方法
from multiprocessing import Process
from multiprocessing import Queue
import time
import threading
def Threads():
print(threading.get_ident()) #获取当前线程pid
def run(conn,qq):
print("from child process",conn)
qq.put([12,True,"hello"])
t = threading.Thread(target=Threads,)
t.start()
if __name__ == '__main__':
q = Queue()
for i in range(20):
p = Process(target=run,args=(i,q)) #将Queue传入子进程
p.start()
print(q.get())
- multiprocessing.Pipe() 方法
跟socket函数的send()、recv()方法类似,recv()会进入阻塞状态等待接收到数据
from multiprocessing import Pipe
from multiprocessing import Process
import os
def Proce(conn):
print("from child process")
print(conn.recv())
conn.send("I'm your child")
if __name__ == '__main__':
parent_pro, child_pro = Pipe()
P = Process(target=Proce,args=(child_pro,))
P.start()
print(parent_pro.send("I'am your parent"))
print(parent_pro.recv())
- multiprocessing.Pool() 线程池
from multiprocessing import pool
from multiprocessing import Pool
from multiprocessing import Process
from multiprocessing import freeze_support
import time
import os
def Proce(i):
time.sleep(1)
print("子线程ID:",os.getpid())
return i+100
def callbackFunction():
print("CallbackFunctionID:",os.getpid())
if __name__ == '__main__':
# pool = pool.ThreadPool(processes=3) #主进程ID与所有子进程ID相同
pool = Pool(processes=3) #线程池大小
print("主进程ID:",os.getpid())
for i in range(10):
pool.apply(func=Proce,args=(i,),callback=callbackFunction()) #同步执行(串行)
#pool.apply_async(func=Proce,args=(i,)) #异步执行(并行)
print("END")
pool.close()
pool.join()
Py初学者,刚刚接触编程,写的比较烂,就希望多交一些朋友,哈哈