- 简单理解进程
import multiprocessing
import time, threading
def thread_r():
'''
定义线程
:return:
'''
print(threading.get_ident())
def run(name):
'''
定义进程操作
:param name: 名字
:return:
'''
time.sleep(2)
print("Hello, ", name)
t = threading.Thread(target=thread_r)
t.start()
if __name__ == "__main__":
for i in range(10):
i = multiprocessing.Process(target=run, args=("Jim", ))
i.start()
- 获取进程ID
import multiprocessing
import os
def info(n):
'''
定义获取进程ID函数
:param n:
:return:
'''
print(n)
print("Module name:", __name__)
print("Parent ID", os.getppid())
print("Process ID", os.getpid())
print("\n\n")
def f(name):
'''
定义进程函数
:param name: 名字
:return:
'''
info("\033[41;1m function \033[0m")
print("hello", name)
if __name__=="__main__":
info("\033[42;1m main process \033[0m")
p1 = multiprocessing.Process(target=f, args=("Jim", ))
p1.start()
- 进程队列不同于线程队列
from multiprocessing import Process, Queue
import queue
import threading
def f(qq):
qq.put([22, None, "Jim"])
if __name__=="__main__":
q = Queue()
p = Process(target=f, args=(q, ))
p.start()
print(q.get())
- 进程池,相当于线程的信号量
from multiprocessing import Process,Pool,freeze_support
import os
import time
def Foo(n):
time.sleep(2)
print("The function:", os.getpid())
return n+10
def Bar(arg):
print("------exec done", arg)
if __name__=="__main__":
pool = Pool(5)
for i in range(10):
pool.apply_async(func=Foo, args=(i, ), callback=Bar)
print("-------End---------")
pool.close()
pool.join()
- 进程锁,保证输出结果不混乱
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 i in range(10):
Process(target=f, args=(lock, i)).start()