spawn模式下的第一种方式
import time
import multiprocessing
def task(lock):
print("开始")
lock.acquire()
#假设文件中保存的内容就是一个值:10
with open ("f1.txt",mode = "r",encoding = "utf-8") as f:
current_num = int(f.read())
print("排队抢票了")
time.sleep(0.5)
current_num -= 1
with open("f1.txt",mode = "w",encoding = "utf-8") as f:
f.write(str(current_num))
lock.release()
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
lock = multiprocessing.RLock() #进程锁
for i in range(10):
p = multiprocessing.Process(target=task,args = (lock,))
p.start()
#spawn模式,需要特殊处理
time.sleep(7)
image.png
spawn模式的第二种方式
import time
import multiprocessing
def task(lock):
print("开始")
lock.acquire()
#假设文件中保存的内容就是一个值:10
with open ("f1.txt",mode = "r",encoding = "utf-8") as f:
current_num = int(f.read())
print("排队抢票了")
time.sleep(0.5)
current_num -= 1
with open("f1.txt",mode = "w",encoding = "utf-8") as f:
f.write(str(current_num))
lock.release()
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
lock = multiprocessing.RLock() #进程锁
process_list = []
for i in range(10):
p = multiprocessing.Process(target=task,args = (lock,))
#把所有进程都丢给cpu运行
p.start()
process_list.append(p)
#spawn模式,需要特殊处理
for item in process_list:
item.join()
image.png
fork模式
fork模式不需要特殊处理
import time
import multiprocessing
def task(lock):
print("开始")
lock.acquire()
#假设文件中保存的内容就是一个值:10
with open ("f1.txt",mode = "r",encoding = "utf-8") as f:
current_num = int(f.read())
print("排队抢票了")
time.sleep(0.5)
current_num -= 1
with open("f1.txt",mode = "w",encoding = "utf-8") as f:
f.write(str(current_num))
lock.release()
if __name__ == '__main__':
multiprocessing.set_start_method("fork")
lock = multiprocessing.RLock() #进程锁
process_list = []
for i in range(10):
p = multiprocessing.Process(target=task,args = (lock,))
#把所有进程都丢给cpu运行
p.start()
process_list.append(p)
image.png












网友评论