python的多程序和多執行緒 2

2021-08-20 05:30:31 字數 4122 閱讀 6059

from multiprocessing import manager, process

defworker

(dt, lt):

for i in range(10):

dt[i] = i*i

lt += [x for x in range(11, 16)]

if __name__ == '__main__':

manager = manager()

dt = manager.dict()

lt = manager.list()

p = process(target=worker, args=(dt, lt))

p.start()

p.join(timeout=3)

print(dt)

print(lt)

#輸出[11, 12, 13, 14, 15]

import time

import multiprocessing

def fun(msg):

print("#########start#### ".format(msg))

time.sleep(3)

print("#########end###### ".format(msg))

if __name__ == '__main__':

print("start main")

pool = multiprocessing.pool(processes=3)

for i in range(1, 7):

msg = "hello ".format(i)

pool.close()#在呼叫join之前,要先呼叫close,否則會報錯,close執行完不會有新的程序加入到pool

pool.join()#join 是等待所有的子程序結束

print("end main")

#輸出start main

######

###start###

# hello 1

######

###start###

# hello 2

######

###start###

# hello 3

######

###end###

### hello 1

#########start#### hello 4

#########end###### hello 2

######

###start###

# hello 5

######

###end###

### hello 3

#########start#### hello 6

#########end###### hello 4

######

###end###

### hello 5

#########end###### hello 6

end main

'''

多執行緒 密集型io

多執行緒的實現有兩種方法:

方法1:

和多程序類似

方法2:

通過繼承的方式

'''import threading

defworker

(args):

print("開始子程序 ".format(args))

print("結束子程序 ".format(args))

if __name__ == '__main__':

print("start main")

t1 = threading.thread(target=worker, args=(1,))

t2 = threading.thread(target=worker, args=(2,))

t1.start()

t2.start()

print("end main")

#輸出start main

開始子程序 1

結束子程序 1

開始子程序 2

end main

結束子程序 2

import threading

import time

class

hello

(threading.thread):

def__init__

(self, args):

super(hello, self).__init__()

self.args = args

defrun(self):

print("開始子程序 ".format(self.args))

time.sleep(1)

print("結束子程序 ".format(self.args))

if __name__ == '__main__':

a = 1

print("start main")

t1 = hello(1)

t2 = hello(2)

t1.start()

t2.start()

print("end main")

#輸出start main

開始子程序 1

開始子程序 2

end main

結束子程序 2

結束子程序 1

類的方式實現

import threading

import time

class

hello

(threading.thread):

def__init__

(self, args):

super(hello, self).__init__()

self.args = args

global a

print("a = ".format(a))

a += 1

defrun

(self):

print("開始子程序 ".format(self.args))

print("結束子程序 ".format(self.args))

if __name__ == '__main__':

a = 1

print("start main")

t1 = hello(5)

time.sleep(3)

t2 = hello(5)

t1.start()

t2.start()

print("#####a = ####".format(a))

print("end main")

#輸出start main

a = 1

a = 2

開始子程序 5

結束子程序 5

#####a = 3####

end main

開始子程序 5

結束子程序 5

import threadpool

defhello

(m, n, o):

print("m = n= o=".format(m, n, o))

if __name__ == '__main__':

# 方法1

lst_vars_1 = ['1', '2', '3']

lst_vars_2 = ['4', '5', '6']

func_var = [(lst_vars_1, none), (lst_vars_2, none)]

# 方法2

# dict_vars_1 =

# dict_vars_2 =

# func_var = [(none, dict_vars_1), (none, dict_vars_2)]

pool = threadpool.threadpool(2)

requests = threadpool.makerequests(hello, func_var)

[pool.putrequest(req) for req in requests]

pool.wait()

#輸出m = 1 n=2 o=3

m = 4 n=5 o=6

[finished in

2.3s]

python 多執行緒 和 多程序

單執行緒例子 usr bin python coding utf 8 name danxiancheng.py import time import threading def loop num,sec print loop s start num,time.strftime y m d h m s...

python多執行緒和多程序

pool 感謝多執行緒和多程序最大的不同在於,多程序中,同乙個變數,各自有乙份拷貝存在於每個程序中,互不影響 而多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。python中,多執行...

多程序和多執行緒python

coding utf8 import threading import time class mop floor threading.thread def init self super mop floor,self init def run self print 我要拖地了 time.sleep ...