簡單的理解:單板上執行的乙個程式就是乙個程序。程序是作業系統分配資源的最小單位,不同的程序之間資源不共享,程序間通訊需要使用特定的方式。python提供了自帶的multiprocessing庫,用於多執行緒場景。
importmultiprocessing
import
time
defworker(interval):
while
true:
print("
the time is
".format(time.ctime()))
time.sleep(interval)
if__name__ == "
__main__":
p = multiprocessing.process(target = worker, args = (1,))
p.start()
p.join()
importmultiprocessing
import
time
class
clockprocess(multiprocessing.process):
def__init__
(self, interval):
multiprocessing.process.
__init__
(self)
self.interval =interval
defrun(self):
while
true:
print("
the time is
".format(time.ctime()))
time.sleep(self.interval)
if__name__ == '
__main__':
p = clockprocess(1)
p.start()
p.join()
如果將乙個程序設定為守護程序,那麼當主程序結束時,守護程序也自動結束。
importmultiprocessing
import
time
class
clockprocess(multiprocessing.process):
def__init__
(self, interval):
multiprocessing.process.
__init__
(self)
self.interval =interval
defrun(self):
while
true:
print("
the time is
".format(time.ctime()))
time.sleep(self.interval)
if__name__ == '
__main__':
p = clockprocess(1)
p.daemon = true #
設定子程序為守護程序後,看不到子程序的任何列印
p.start()
print("
main process end
")
如果想主程序等待子程序結束後,使用join即可
importmultiprocessing
defone_task(lock, f):
with lock:
#技巧:使用with後自動獲取鎖和自動釋放鎖
fs = open(f, 'a+'
) n = 10
while n > 1:
fs.write(
"one_task write\n")
n -= 1fs.close()
deftwo_task(lock, f):
lock.acquire()
try:
fs = open(f, 'a+'
) n = 10
while n > 1:
fs.write(
"two task write\n")
n -= 1fs.close()
finally
: lock.release()
if__name__ == "
__main__":
lock =multiprocessing.lock()
f = "
file.txt
"one = multiprocessing.process(target = one_task, args =(lock, f))
two = multiprocessing.process(target = two_task, args =(lock, f))
one.start()
two.start()
one.join()
two.join()
importmultiprocessing
import
time
defwriter_proc(q):
while
true:
q.put(
"message")
time.sleep(1)
defreader_proc(q):
while
true:
(q.get())
if__name__ == "
__main__":
q =multiprocessing.queue()
writer = multiprocessing.process(target = writer_proc, args =(q,))
writer.start()
reader = multiprocessing.process(target = reader_proc, args =(q,))
reader.start()
reader.join()
writer.join()
python多程序之程序池
在利用python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的process動態成生多個程序,十幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,此時可以...
python 多程序 之 join
今天一大早起床,又學三個臭函式,記錄一下自己渺小微弱的學習之路 有時候join 我們是用來連線字串的,但就在今天我學習程序的時候,看見join 居然不是用來連線字串了,而是用來阻塞程序,興趣大增,便深入了解了一下,join 的作用 在程序中可以阻塞主程序的執行,直到等待子執行緒全部完成之後,才繼續執...
Python多程序之Queue管道
from multiprocessing import process,queue 匯入程序的佇列模組,跟執行緒裡的是不一樣 deff q q.put 42,none,hello q.put test if name main 生成乙個佇列,然後將佇列傳給子程序,然後父程序就可以訪問這個子程序操作後...