日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python并发编程1-进程

發布時間:2025/3/15 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python并发编程1-进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主進程和子進程

運行結果:

一旦進程創建后,進程就由操作系統調度

代碼解析:

子進程與父進程

所以主進程的父進程就是pycharm

args傳參

一個參數

兩個參數

join作用(創建多個線程):

?

不一定哪個進程先執行,10個進程的執行順序不固定

代碼延伸:
?

from multiprocessing import Process import time import os def func(filename,content):with open(filename,'w') as f:f.write(content*10*'*') if __name__ =='__main__':p_list=[]for i in range(10):p = Process(target=func, args=('info%s'%i,i))p_list.append(p)p.start()# p.join() 如果加有這句,就會變為同步[p.join() for p in p_list] # 之前的所有進程必須在這里執行完畢才能執行下面的代碼# p0.join()# p1.join()# p2.join()#即使p2線程已經結束,可以執行此代碼,若p0.p1還沒有結束,則需要等到他們結束才能執行此代碼# p3.join()print([i for i in os.walk(r'E:\pythoncode\網絡編程\day6-并發編程')])# 同步 0.1*500 = 50 # 異步 500 0.1 =0.1 # 多進程寫文件 # 首先往文件中寫文件 # 向用戶展示寫入文件之后文件夾中所有的文件名

開啟多個進程(寫文件):

from multiprocessing import Process import time import os def func(filename,content):with open(filename,'w') as f:f.write(content*10*'*') if __name__ =='__main__':p_list=[]for i in range(10):p = Process(target=func, args=('info%s'%i,i))p_list.append(p)p.start()# p.join() 如果加有這句,就會變為同步[p.join() for p in p_list] # 之前的所有進程必須在這里執行完畢才能執行下面的代碼print([i for i in os.walk(r'E:\pythoncode\網絡編程\day6-并發編程')])# 同步 0.1*500 = 50 # 異步 500 0.1 =0.1 # 多進程寫文件 # 首先往文件中寫文件 # 向用戶展示寫入文件之后文件夾中所有的文件名

運行結果:

開啟多個線程的第二種方式:

from multiprocessing import Process import os # 第一種方式 # p=Process(target=,args) # p.start() #第二種 # 自定義類 繼承Process類 # 必須實現一個run方法,run方法是在子進程中執行的代碼class MyProcess(Process):def __init__(self,arg1,arg2):super().__init__() #繼承self.arg1=arg1self.arg2=arg2def run(self):print(self.pid)print(self.name)print(self.arg1)print(self.arg2)print(os.getpid())def start(self):self.run() if __name__ =='__main__':print('主進程pid:',os.getpid())p1=MyProcess(1,2)p1.start()p2=MyProcess(3,4)p2.start()

運行結果:

多進程之間的數據隔離

# 進程與進程之間 from multiprocessing import Process import os def func():global n # 聲明一個全部變量n=0 # 重新定義一個nprint('pid:%s'%os.getpid(),n) if __name__ =='__main__':n=100p=Process(target=func)p.start()p.join()print('主進程:',os.getpid(),n)

運行結果:

對這個數據隔離不太懂

守護進程

#守護進程 #子進程--》守護進程from multiprocessing import Process import time def func():while True:time.sleep(0.5)print('我還活著')def func2():print(' func2 start')time.sleep(8)print('func2 finished')if __name__=='__main__':p=Process(target=func)p.daemon=Truep.start()p2 = Process(target=func2)p2.start()p2.terminate() #結束一個子進程print(p2.is_alive())time.sleep(2)print(p2.is_alive())i=0while i<4:print('socketserver')time.sleep(1)i+=1# 守護進程會隨著 主進程的代碼 執行完畢 而 結束

運行結果:

鎖機制

from multiprocessing import Process,Lock import json import time def show(i):with open('ticket') as f:dic=json.load(f)print('第%s個人還有%s張票'%(i,dic['ticket']))def buy_ticket(lock,i):lock.acquire()with open('ticket') as f:dic = json.load(f)time.sleep(0.1)if dic['ticket']>0:dic['ticket'] -= 1print('\033[32m第%s個人買到票了\033[0m' % i)else:print('\033[31m第%s個人沒有買到票了\033[0m' % i)with open('ticket','w') as f:json.dump(dic,f)lock.release()if __name__=='__main__':for i in range(10):p=Process(target=show,args=(i,))p.start()lock=Lock()for i in range(10):p = Process(target=buy_ticket, args=(lock,i))p.start()

運行結果:

錯誤案例:

from multiprocessing import Process def func():num=input('>>>')print(num)if __name__ =='__main__':Process(target=func).start()# 發生錯誤是因為現在這個控制臺是主進程的控制臺,而輸入操作是子線程開啟的,所以在主控制臺不可以輸入,所以報錯

多進程實現qq聊天(socketserver模塊):

server端:

import socket from multiprocessing import Processdef serve(conn):ret = '你好'.encode('utf-8')conn.send(ret)msg = conn.recv(1024).decode('utf-8')print(msg)# ret=input('>>>').encode('utf-8')# conn.send(ret)conn.close() if __name__ =='__main__':sk = socket.socket()sk.bind(('127.0.0.1', 8080))sk.listen()while True:conn,addr=sk.accept()p=Process(target=serve,args=(conn,))p.start()sk.close()

client端:

import socket sk=socket.socket() sk.connect(('127.0.0.1',8080)) msg=sk.recv(1024).decode('utf-8') print(msg) ret=input('>>>').encode('utf-8') sk.send(ret) print(msg) sk.close()

運行結果:

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的python并发编程1-进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。