python併發基礎小練習

2022-04-10 19:57:23 字數 3470 閱讀 8673

必做題

缺點:1、使用者獨佔全機

2、cpu等待人工操作

省了大量手工操作

1、單道批處理系統:沒有併發性

特點:自動性、順序性、單道性

缺點:i/o操作時,cpu無事可做

2、多道批處理系統:具有併發性

特點:多道性、巨集觀上多工並行、微觀上多工分片序列

優點:由於提高了cpu、記憶體和i/o裝置的利用率,因此系統吞吐得到提高

需要解決的問題:

處理及管理問題、記憶體管理問題、i/o裝置管理問題、檔案管理問題和作業管理問題

缺點:無互動能力

特點:多路性、獨立性(巨集觀)、及時性和互動性

特點:多路性、獨立性、及時性和可靠性

單使用者單任務系統(dos)、單使用者多工系統(windows)、多使用者多工系統(linux、uinux)

先來先服務

時間段的先服務

時間片輪**+多級反饋佇列

等等……

乙個任務在占用cpu時,輸入輸出裝置不會空閒,為下乙個任務的執行做準備

同步:可以理解為在執行完乙個函式或方法之後,一直等待系統返回值或訊息,這時程式是出於阻塞的,只有接收到返回的值或訊息後才往下執行其他的命令。

非同步:執行完函式或方法後,不必阻塞性地等待返回值或訊息,只需要向系統委託乙個非同步過程,那麼當系統接收到返回值或訊息時,系統會自動觸發委託的非同步過程,從而完成乙個完整的流程。

阻塞:阻塞態

非阻塞:就緒態、執行態

# 第一種方式 匯入模組的方式

from multiprocessing import process

import time

def task(name):

print('%s is running'%name)

time.sleep(3)

print('%s is over'%name)

if __name__ == '__main__':

p = process(target=task, args=('pipi',))

p.start()

print('>>>>>')

# 第二種方式 類的繼承

from multiprocessing import process

import time

class myprocess(process):

def run(self):

print('hello bf girl')

time.sleep(1)

print('get out!')

if __name__ == '__main__':

p = myprocess()

p.start()

print('>>>>>')

from multiprocessing import process

from multiprocessing import joinablequeue

import time

import random

def producer(name, food, q):

for i in range(4):

data = f''

time.sleep(random.uniform(1, 2))

print(f'生產者生產了')

q.put(data)

def customer(name, q):

while true:

data = q.get()

time.sleep(random.choice([1, 2]))

print(f'消費者購買了')

q.task_done() # 沒執行一次佇列資料計數器-1

if __name__ == '__main__':

q = joinablequeue()

p1 = process(target=producer, args=('商家1', '包子', q))

p2 = process(target=producer, args=('商家2', '泔水', q))

c1 = process(target=customer, args=('使用者1', q))

c2 = process(target=customer, args=('使用者2', q))

c1.daemon = true

c2.daemon = true

p1.start()

p2.start()

c1.start()

c2.start()

p1.join()

p2.join()

q.join()

import socket

from threading import thread

from multiprocessing import process

server =socket.socket()

server.bind(('127.0.0.1',8080))

server.listen(5)

def talk(conn):

# 通訊迴圈

while true:

try:

data = conn.recv(1024)

if len(data) == 0: break

print(data.decode('utf-8'))

conn.send(data.upper())

except connectionreseterror as e:

print(e)

break

conn.close()

# 鏈結迴圈

while true:

conn, addr = server.accept() # 接客

t = thread(target=talk,args=(conn,))

# t = process(target=talk,args=(conn,))

t.start()

"""客戶端"""

import socket

client = socket.socket()

client.connect(('127.0.0.1',8080))

while true:

client.send(b'hello world')

data = client.recv(1024)

print(data.decode('utf-8'))

選做題

python常見基礎小練習

1.輸入乙個年份,判斷是否為閏年。條件1 不能被100整除且能被4整除 條件2 被400整除 世紀年 year int input 請輸入乙個年份 if year 4 0 and year 100 0 print d年是閏年 year elif year 400 0 print d年是閏年 year...

python基礎小練習(1)

1 int 3.14159 float 3 會輸出什麼結果?type int 3.14159 type float 3 的結果又是什麼?前後結果是否一樣,為什麼?int 3.14159 float 3 type int 3.14159 type float 3 前後結果不一樣,因為前者等號兩邊輸出的...

python基礎 綜合小練習

在猜年齡的基礎上編寫登入 註冊方法,並且把猜年齡遊戲分函式處理,如 登入函式 註冊函式 猜年齡函式 選擇獎品函式 def register 註冊功能 count 0 while count 3 username inp input 請輸入你的使用者名稱 pwd inp input 請輸入你的密碼 r...