小知识点部分:1.获得线程的ID号:
threading.get_ident()
2.获得进程号:os.getppid() 获得父进程的PID
os.getpid() 获得子进程的PID
回调是由主进程进行的,而不是由子进程进行的
3.进程通信:
1.进程Q其实是由一块中间区的翻译,两个进程之间可以相互,利用pickle来 进行传输的,使用进程Q来实现两个进程之间的通信
2.管道:
import multiprocessing
import threading
import queue
def func(pip_parent):
pip_parent.send("你好,我是子进程")
if __name__ == "__main__":
pip_child, pip_parent = multiprocessing.Pipe()
process = multiprocessing.Process(target=func, args=(pip_parent,))
process.start()
a = pip_child.recv()
print(a)
3.manaeger:
def func(l1):
l1.append(os.getpid())
if __name__ == "__main__":
with multiprocessing.Manager() as manager:
l1 = manager.list()
list_progress = []
for i in range(10):
process = multiprocessing.Process(target=func,args=(l1,))
list_progress.append(process)
process.start()
for i in list_progress:
i.join()
print(l1)
4.进程锁:进程之间可以分享屏幕,保证不会再屏幕上乱输出
5.进程池:
#进程池的产生
pool =
#进程池执行进程的两种方式
pool.apply_async(func=fun, callback=fun2) 会直接启动线程,并行方式调用
pool.apply() 串行方式调用
#进程池的close和join
pool.close
pool.join
#进程池的回调
callback,但是回调的参数必须写一个arg