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 ...