linux下申请子线程
创建
import os
rpid = os.fork() #父程序得到子程序的id 子线程为0
getpid()、getppid()
跨平台进程
可以用CLass继承 Process 写run方法
进程池Pool
重点:
po.apply(worker,(i,)) 堵塞式添加,优先度相对于apply_async,优先度最高。
进程间通信-Queue
process之间用 q = Queue()
pool通信用 q = Manager().Queue()
多线程-threading
t = threading.Thread(target=saySorry)
t.start() #启动线程,即让线程开始执⾏
主线程会等待所有的⼦线程结束后才结束
length = len(threading.enumerate())
#创建锁
mutex = threading.Lock()
#锁定
mutex.acquire([blocking])
#释放
mutex.release()
ThreadLocal
⼀个ThreadLocal变量虽然是全局变量,但每个线程都只能读写⾃⼰线程的独⽴副本,互不⼲扰。ThreadLocal解决了参数在⼀个线程中各个函数之间互相传递的问题。
python中的线程是假线程实际上有个叫GIL(全剧解释其锁)的模块控制程序只占用一核。如果要做到真正的多线程,还要考虑使用别的语言一起做。