簡體   English   中英

需要並行運行相同的python文件

[英]Need of running the same python file in parallel

我正在運行一個python程序。 它基本上是進行ssh連接並維持該連接,即程序直到手動終止后才再次進入bash shell。 像下面這樣

bash-4.1$ python monitor.py
CONNECTION MADE
one done...
two done...
three done...
.
.
.

我想讓同一個monitor.py並行運行以進行各種ssh連接。 它們都是彼此獨立的,不需要交換信息。 我可以通過Multithreading或多Multiprocessing嗎?

您可以創建多個線程來實現您在問題中提到的內容。 以下代碼是Python中的多線程示例。 嘗試使用您的文件。

import thread
import time

# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )

# Create two threads as follows
try:
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

輸出量

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

這是一個類似的示例,它使用多處理而不是多線程(有關文檔,請參見官方文檔 )。 Mulitprocessing的工作原理與多線程非常相似,但是它規避了全局解釋器鎖,因此允許您的腳本同時實際運行不同的進程,並有可能更好地利用有限的計算資源。

將多處理導入為mp

def my_function(*args):
    print("Arguments: {0}".format(args))


class MyProcess(mp.Process):
    def __init__(self, target, args):
        mp.Process.__init__(self, target=target, args=args)

def main():
    a1 = MyProcess(target=my_function, args=("1st Process...",))
    a2 = MyProcess(target=my_function, args=("2nd Process...",))
    a3 = MyProcess(target=my_function, args=("3rd Process...",))
    a4 = MyProcess(target=my_function, args=("4th Process...",))

    proclist = [a1, a2, a3, a4]
    for proc in proclist:
        proc.start()

    for proc in proclist:
        proc.join()

if __name__ == '__main__':
    main()

輸出:

Arguments: ('1st Process...',)
Arguments: ('2nd Process...',)
Arguments: ('3rd Process...',)
Arguments: ('4th Process...',)

盡管這些任務似乎是固定的順序,但是如果您添加的任務花費的時間不確定,它們將按照完成的順序出現。 只需將my_function的內容替換為您的代碼,就應該設置好了。 (注意:這使用的是Python2。在Python 3中也可以使用相同的功能,只需進行很少的修改(也許沒有做任何修改),但是如果您使用的是Python 3,則還應該研究concurrent.futures )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM