執行緒代替方案 多程序

2021-08-21 04:23:57 字數 4324 閱讀 3081

multiprocessiong

concurrent.futures

# 直接生成process例項物件

# -*- coding:utf-8 -*-

import multiprocessing

from time import sleep, ctime

defclock

(interval):

i = 0

while i < 5:

print("the time is %s" % ctime())

sleep(interval)

i += 1

if __name__ == '__main__':

p = multiprocessing.process(target=clock, args=(5,))

p.start()

the time is mon jul  2 14:07:34 2018

the time is mon jul 2 14:07:39 2018

the time is mon jul 2 14:07:44 2018

the time is mon jul 2 14:07:49 2018

the time is mon jul 2 14:07:54 2018

# 派生子類

# -*- coding:utf-8 -*-

import multiprocessing

from time import sleep, ctime

class

clockprocess

(multiprocessing.process):

""" 兩個函式比較

1、init建構函式

2、run

"""def__init__

(self, interval):

super().__init__()

self.interval = interval

defrun(self):

i = 0

while i < 5:

print("the time is %s" % ctime())

sleep(self.interval)

i += 1

if __name__ == "__main__":

p = clockprocess(3)

p.start()

the time is mon jul  2 14:08:09 2018

the time is mon jul 2 14:08:12 2018

the time is mon jul 2 14:08:15 2018

the time is mon jul 2 14:08:18 2018

the time is mon jul 2 14:08:21 2018

# -*- coding:utf-8 -*-

from multiprocessing import process

import os

definfo

(title):

print(title)

print("module name:", __name__)

# 得到父程序的id

print("parent process:", os.getppid())

# 得到本身程序的id

print("process id :", os.getpid())

deff

(name):

info('function f')

print('hello', name)

if __name__ == '__main__':

info('main line')

p = process(target=f, args=('whj',))

p.start()

main line

module name: __main__

parent process: 19586

process id : 20428

function f

module name: __main__

parent process: 20428

process id : 20463

hello whj

# -*- coding:utf-8 -*-

import multiprocessing

from time import sleep, ctime

defconsumer

(input_q):

print("into consumer:", ctime())

i = 0

while i < 100:

# 預處理項

item = input_q.get()

print("pull", item, "out of q") # 此項替換為有用的工作

input_q.task_done() # 發出訊號通知任務完成

i += 1

print("out of consumer:", ctime())

defproducer

(sequence, output_q):

print("into producer:", ctime())

for item in sequence:

output_q.put(item)

print("put", item, "into q")

print("out of producer:", ctime())

if __name__ == "__main__":

q = multiprocessing.joinablequeue()

# 執行消費者進行

qc = multiprocessing.process(target=consumer, args=(q,))

qc.daemon = true

qc.start()

# 生產多個項,sequence代表要發給消費者的序列項

# 在實踐中,這可能是生成器的輸出或通過一些其他方法的返回

sequence = [1, 2, 3, 4]

producer(sequence, q)

# 等待所有項被處理

q.join()

# -*- coding:utf-8 -*-

import multiprocessing

from time import sleep, ctime

defconsumer

(input_q):

print("into consumer:", ctime())

while

true:

# 預處理項

item = input_q.get()

if item is

none:

break

print("pull", item, "out of q") # 此項替換為有用的工作

input_q.task_done() # 發出訊號通知任務完成

print("out of consumer:", ctime())

defproducer

(sequence, output_q):

print("into producer:", ctime())

for item in sequence:

output_q.put(item)

print("put", item, "into q")

print("out of producer:", ctime())

if __name__ == "__main__":

q = multiprocessing.joinablequeue()

# 執行消費者進行

qc = multiprocessing.process(target=consumer, args=(q,))

qc.daemon = true

qc.start()

# 生產多個項,sequence代表要發給消費者的序列項

# 在實踐中,這可能是生成器的輸出或通過一些其他方法的返回

sequence = [1, 2, 3, 4, -1]

producer(sequence, q)

q.put(none) # 哨兵值

# 等待所有項被處理

qc.join()

多執行緒 多程序?

這幾天在思考如何改進原型在多個客戶端的情況下的效能,特地溫習了一下多程序和多執行緒的一些知識。在linux下程序的程序和執行緒在核心看來區別很小,都是乙個可排程單元,都擁有記憶體管理結構等等。但是關鍵的差別是程序的資源都是私有的,而執行緒則是和別人共享的,所以執行緒的上下文切換可能比程序的開銷要小很...

多程序,多執行緒

多工程式設計 通過應用程式利用多個計算機核心達到多工同時執行的 目的,從此來提公升程式執行效率 多程序,多執行緒 程序 程式在計算機中一次執行的過程 程式 靜態的描述,不占有計算機資源 程序 是乙個動態的過程,占有cpu,記憶體等計算機資源 有一定的生命週期 同乙個程式,每次執行都是不同的程序,因為...

多執行緒 多程序

是什麼?能幹什麼?單執行緒情況下,執行效率低。系統的資源沒有得到充分利用。計算密集型 運算量比較大 io密集型 cpu空閒,輸入輸出較多 怎麼幹?爬蟲 io密集型 多執行緒 橫向 所有的程式的執行都在乙個執行緒中,程式啟動時,啟動多執行緒,每個執行緒跑同樣的 縱向 將程式進行拆分,每個執行緒跑特定的...