Python實現多工(協程 執行緒 程序)

2021-10-13 05:30:10 字數 3494 閱讀 5892

from gevent import monkey

import gevent

import urllib.request

monkey.patch_all(

)def

my_download

(url)

:print

('get:%s'

% url)

resp = urllib.request.urlopen(url)

data = resp.read(

)print

('%d bytes recived from: %s'%(

len(data)

, url)

)gevent.joinall(

[ gevent.spawn(my_download,

''),

gevent.spawn(my_download,

''),

gevent.spawn(my_download,

'')]

)

"""

執行緒:多工版udp聊天器

"""import socket

import threading

defsend_msg

(udp_socket)

:"""獲取鍵盤資料並傳送給對方"""

while

true

: msg =

input

("\n請輸入要傳送的資料:"

) dest_ip =

input()

dest_port =

int(

input

("\n請輸入對方的port:"))

udp_socket.sendto(msg.encode(

"utf-8"),

(dest_ip, dest_port)

)def

recv_msg

(udp_scoket)

:"""接受資料並顯示"""

while

true

: recv_msg = udp_scoket.recvfrom(

1024

) recv_ip = recv_msg[1]

recv_msg = recv_msg[0]

.decode(

'utf-8'

)print

(">>>%s: %s"%(

str(recv_ip)

, recv_msg)

)def

main()

: udp_socket = socket.socket(socket.af_inet, socket.sock_dgram)

udp_socket.bind((""

,7890))

t = threading.thread(target=recv_msg, args=

(udp_socket,))

t.start(

) send_msg(udp_socket)

if __name__ ==

"__main__"

: main(

)

import multiprocessing

import os

import time

import random

defcopy_file

(queue, file_name,source_folder_name, dest_folder_name)

:"""copy檔案到指定的路徑"""

f_read =

open

(source_folder_name +

"/"+ file_name,

"rb"

) f_write =

open

(dest_folder_name +

"/"+ file_name,

"wb"

)while

true

: time.sleep(random.random())

content = f_read.read(

1024

)if content:

f_write.write(content)

else

:break

f_read.close(

) f_write.close(

)# 傳送已經拷貝完畢的檔案名字

queue.put(file_name)

defmain()

:# 獲取要複製的資料夾

source_folder_name =

input

("請輸入要複製資料夾名字:"

)# 整理目標資料夾

dest_folder_name = source_folder_name +

"[副本]"

# 建立目標資料夾

try:

os.mkdir(dest_folder_name)

except

:pass

# 如果資料夾已經存在,那麼建立會失敗

# 獲取這個資料夾中所有的普通檔名

file_names = os.listdir(source_folder_name)

# 建立queue

queue = multiprocessing.manager(

).queue(

)# 建立程序池

pool = multiprocessing.pool(3)

for file_name in file_names:

# 向程序池中新增任務

(queue, file_name, source_folder_name, dest_folder_name)

)# 主程序顯示進度

pool.close(

) all_file_num =

len(file_names)

while

true

: file_name = queue.get(

)if file_name in file_names:

file_names.remove(file_name)

copy_rate =

(all_file_num-

len(file_names))*

100/all_file_num

print

("\r%.2f...(%s)"

%(copy_rate, file_name)

+" "*50

, end="")

if copy_rate >=

100:

break

print()

if __name__ ==

"__main__"

: main(

)

Python 多工,程序 執行緒 協程

cpu中計算的東西叫做 核心 乙個核 同一時刻 只能做一件事情 例子 把教室看做乙個cpu,教室中有乙個人,這個人看做 核心 並行 多個任務同時執行,真正的多工 併發 假的多工,依靠時間片輪詢,讓多個任務隨機分配時間執行 時間片輪詢機制 cpu給多個任務隨機分配執行時間去執行,由於cpu執行速度非常...

Python 多工 程序 執行緒 協程

目錄程序建立 執行緒建立 協程建立 多程序 multiprocessing 多執行緒 threading 程序 執行緒多程序 多執行緒程序池 pool 執行緒池 threadpool 程序是資源分配的基本單位。執行緒是作業系統排程的單位。程序切換需要的資源很大,效率很低。執行緒切換需要的資源一般,效...

Python 多工 協程

高階程式設計技巧 學習筆記 1.1 同步 非同步 1.2 阻塞 非阻塞 2.1 什麼是協程?協程,又稱微執行緒。協程是 python 個中另外一種實現多工的方式,只不過比執行緒更小占用更小執行單元 理解為需要的資源 2.2 python中的協程大概經歷了如下三個階段 最初的生成器變形yield se...