进程和线程,有时总是让人傻傻分不清,其实进程是资源分配最小单位,线程是程序执行的最小单位。其实一定程度上,进程会占用大量的资源,相比之下,Python的线程会更有优势。
但是,注意!注意!注意!
Python官网的Python版本是基于C开发的版本,简称CPython,内部存在GIL(全局变量锁),由此,CPython在使用多线程时并非几个线程同时运行,要解决这个问题,可以更换Python的解释器(例如使用Java开发的JPython)或者使用别的语言解决GIL问题,通过Python再链接后使用!!!
Python实现多进程、多线程的几种方式,首先是进程。
from multiprocessing import Process
利用已经写好的包导入即可,在使用过程中注意一下Process的传参,主要是在进程间的通信,以下使用了队列的方式来实现进程之间的通信。
from multiprocessing import Process, Queue
import time
def one(q):
# 测试进程
for i in range(3):
time.sleep(2)
print('测试进程_one')
# 测试进程通信
num = [11,22,33,44]
for n in num:
q.put(n)
print('进程one写入队列完成!')
def two(q):
# 测试进程
for i in range(3):
time.sleep(2)
print('测试进程_two')
# 测试进程通信
new_list = []
while True:
new_list.append(q.get())
if q.empty():
break
print("输出进程two读取进程one的数据!")
print(new_list)
def main():
# 用于进程通信
q = Queue()
# 设置进程
p1 = Process(target=one, args=(q,))
p2 = Process(target=two, args=(q,))
p1.start()
p2.start()
if __name__ == "__main__":
main()