中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python多進程使用函數封裝的方法

發布時間:2020-07-29 13:00:00 來源:億速云 閱讀:293 作者:小豬 欄目:開發技術

這篇文章主要講解了python多進程使用函數封裝的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

我就廢話不多說了,直接看代碼吧!

import multiprocessing as mp
from multiprocessing import Process
class MyProcess(Process):
  """
  自定義多進程,繼承自原生Process,目的是獲取多進程結果到queue
  """
  def __init__(self, func, args, q):
    super(MyProcess, self).__init__()
    self.func = func
    self.args = args
    self.res = ''
    self.q = q
    #self._daemonic = True
    #self._daemonic = True
 
  def run(self):
    self.res = self.func(*self.args)
    self.q.put((self.func.__name__, self.res))
  
def use_multiprocessing(func_list):
  #os.system('export PYTHONOPTIMIZE=1') # 解決 daemonic processes are not allowed to have children 問題
  q = mp.Queue() # 隊列,將多進程結果存入這里,進程間共享, 多進程必須使用 multiprocessing 的queue
  proc_list = []
  res = []
  for func in func_list:
    proc = MyProcess(func['func'], args=func['args'], q=q)
    proc.start()
    proc_list.append(proc)
 
  for p in proc_list:
    p.join()
  while not q.empty():
    r = q.get()
    res.append(r)
  return res

使用時候,將需要多進程執行的函數和函數的參數當作字段,組成個list 傳給use_multiprocessing 方法即可

補充知識:python一個文件里面多個函數同時執行(多進程的方法,并發)

看代碼吧!

 #coding=utf-8
import time
from selenium import webdriver
import threading

def fun1(a):
  print a

def fun2():
  print 222

threads = []
threads.append(threading.Thread(target=fun1,args=(u'愛情買賣',)))
threads.append(threading.Thread(target=fun2))
print(threads)
if __name__ == '__main__':
  for t in threads:
    t.setDaemon(True) #我拿來做selenium自動化模擬多個用戶使用瀏覽器的時候,加了這個就啟動不了,要去掉
    t.start()

import threading

首先導入threading 模塊,這是使用多線程的前提。

threads = []
t1 = threading.Thread(target=fun1,args=(u'愛情買賣',))
threads.append(t1)

創建了threads數組,創建線程t1,使用threading.Thread()方法,在這個方法中調用music方法target=music,args方法對music進行傳參。 把創建好的線程t1裝到threads數組中。

接著以同樣的方式創建線程t2,并把t2也裝到threads數組。

for t in threads:
  t.setDaemon(True)
  t.start()

最后通過for循環遍歷數組。(數組被裝載了t1和t2兩個線程)

setDaemon()

setDaemon(True)將線程聲明為守護線程,必須在start() 方法調用之前設置,如果不設置為守護線程程序會被無限掛起。子線程啟動后,父線程也繼續執行下去,當父線程執行完最后一條語句print "all over %s" %ctime()后,沒有等待子線程,直接就退出了,同時子線程也一同結束。

start()

開始線程活動。

后記:

搞了個并發瀏覽器操作,

如果要做參數化,用ddt會導致所有行為都在一個瀏覽器操作,去掉ddt框架后,并發正常

看完上述內容,是不是對python多進程使用函數封裝的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当涂县| 阿克陶县| 剑河县| 秀山| 凤凰县| 余干县| 确山县| 那坡县| 江油市| 宣城市| 古浪县| 上高县| 丰台区| 汝阳县| 广宗县| 滨州市| 南投县| 浙江省| 荔波县| 称多县| 朝阳区| 博兴县| 中牟县| 漳州市| 东阳市| 平定县| 淄博市| 金山区| 太保市| 黄平县| 巩义市| 昌乐县| 临颍县| 霍山县| 交口县| 尉犁县| 旬邑县| 江门市| 盘山县| 鄂州市| 铜鼓县|