我是python的新手,嘗試同時執行兩個任務。這些任務只是在Web服務器上獲取頁面,並且可以在另一個之前終止。我只想在服務完所有請求後才顯示結果。在linux shell中很容易,但是我無法使用python,所有的howto對於像我這樣的初學者來說都像黑魔法一樣。與下面的bash腳本的簡單性相比,它們都讓我看起來很複雜。Python中的簡單多線程
這裏是bash腳本,我想在python效仿:
# First request (in background). Result stored in file /tmp/p1
wget -q -O /tmp/p1 "http://ursule/test/test.php?p=1&w=5" &
PID_1=$!
# Second request. Result stored in file /tmp/p2
wget -q -O /tmp/p2 "http://ursule/test/test.php?p=2&w=2"
PID_2=$!
# Wait for the two processes to terminate before displaying the result
wait $PID_1 && wait $PID_2 && cat /tmp/p1 /tmp/p2
的test.php的腳本是一個簡單的:
<?php
printf('Process %s (sleep %s) started at %s ', $_GET['p'], $_GET['w'], date("H:i:s"));
sleep($_GET['w']);
printf('finished at %s', date("H:i:s"));
?>
的bash腳本返回以下:
$ ./multiThread.sh
Process 1 (sleep 5) started at 15:12:59 finished at 15:12:04
Process 2 (sleep 2) started at 15:12:59 finished at 15:12:01
我到目前爲止在python 3中試過的東西:
#!/usr/bin/python3.2
import urllib.request, threading
def wget (address):
url = urllib.request.urlopen(address)
mybytes = url.read()
mystr = mybytes.decode("latin_1")
print(mystr)
url.close()
thread1 = threading.Thread(None, wget, None, ("http://ursule/test/test.php?p=1&w=5",))
thread2 = threading.Thread(None, wget, None, ("http://ursule/test/test.php?p=1&w=2",))
thread1.run()
thread2.run()
像預期的那樣返回這不起作用:
$ ./c.py
Process 1 (sleep 5) started at 15:12:58 finished at 15:13:03
Process 1 (sleep 2) started at 15:13:03 finished at 15:13:05
你想'thread1.start(); thread2.start()'然後'join'。有關線程模塊的基本信息,請參閱http://docs.python.org/2/library/threading.html。現在,線程不會複製您與Bash的行爲。爲此,您將需要多個進程,並且您應該檢查多處理模塊http://docs.python.org/2/library/multiprocessing.html – mmgp
它似乎與join一起工作正常。我會看看多處理。感謝您讓我走上正軌。 – ripat