Saya memiliki skrip dan saya ingin satu fungsi berjalan pada saat yang sama.
Contoh kode yang telah saya lihat:
import threading
def MyThread (threading.thread):
# doing something........
def MyThread2 (threading.thread):
# doing something........
MyThread().start()
MyThread2().start()
Saya mengalami masalah dalam menjalankan ini. Saya lebih suka menjalankan ini menggunakan fungsi berulir daripada kelas.
Ini skrip yang berfungsi:
from threading import Thread
class myClass():
def help(self):
os.system('./ssh.py')
def nope(self):
a = [1,2,3,4,5,6,67,78]
for i in a:
print i
sleep(1)
if __name__ == "__main__":
Yep = myClass()
thread = Thread(target = Yep.help)
thread2 = Thread(target = Yep.nope)
thread.start()
thread2.start()
thread.join()
print 'Finished'
python
multithreading
chrissygormley
sumber
sumber
exiting
sebagaiexciting
, yang saya pikir itu pula yang lebih tepat.Ada beberapa masalah dengan kode Anda:
Jika Anda benar-benar ingin melakukan ini hanya dengan fungsi, Anda memiliki dua opsi:
Dengan threading:
Dengan utas:
Doc untuk thread.start_new_thread
sumber
thread.start_new_thread(function, args[, kwargs])
Saya mencoba menambahkan join lain (), dan sepertinya berhasil. Ini kode
sumber
Anda bisa menggunakan
target
argumen diThread
konstruktor untuk secara langsung meneruskan fungsi yang dipanggil alih-alihrun
.sumber
Apakah Anda mengganti metode run ()? Jika Anda menimpanya
__init__
, apakah Anda memastikan untuk memanggil pangkalanthreading.Thread.__init__()
?Setelah memulai kedua utas, apakah utas utama terus bekerja tanpa batas / blok / gabung pada utas anak sehingga eksekusi utas utama tidak berakhir sebelum utas anak menyelesaikan tugas mereka?
Dan akhirnya, apakah Anda mendapatkan pengecualian yang tidak ditangani?
sumber
__init__
. Apakah perlu menjalankan ()? Terima kasihdef MyThread ( threading.thread )
... Saya berasumsi bahwa itu adalah definisi kelas. Jika Anda akan membuat subclass threading.thread dan menginisialisasi objek thread dengantarget=None
atau menghilangkantarget
arg, maka diperlukan implementasi run (). Jika tidak, jika Anda hanya ingin menjalankan tugas sederhana di utas lain, lihat jawaban jkp.Python 3 memiliki fasilitas Peluncuran tugas paralel . Ini membuat pekerjaan kami lebih mudah.
Memiliki untuk penyatuan utas dan Proses penyatuan .
Berikut ini memberikan wawasan:
Contoh ThreadPoolExecutor
Contoh lain
sumber