Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Thread Saya Berjalan Sebelum Memanggil `Thread.start()` dalam Python?

Mengapa Thread Saya Berjalan Sebelum Memanggil `Thread.start()` dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-11-10 08:11:02697semak imbas

Why Does My Thread Run Before Calling `Thread.start()` in Python?

Thread Mula Berjalan Sebelum Memanggil Thread.start

Dalam Python, threading membenarkan penciptaan dan pelaksanaan berbilang thread dalam satu program. Kesalahpahaman yang biasa ialah benang mula berjalan serta-merta selepas dibuat, walaupun tanpa memanggil Thread.start() secara eksplisit. Walau bagaimanapun, ini tidak berlaku.

Pertimbangkan coretan kod berikut:

import threading

t1 = threading.Thread(target=self.read())
print("something")
t2 = threading.Thread(target=self.runChecks(), args=(self,))

Dalam contoh ini, dua urutan t1 dan t2 dicipta tetapi kedua-duanya belum dimulakan lagi. Fungsi self.read() berjalan selama-lamanya, yang bermaksud program tidak akan sampai ke baris cetakan. Tingkah laku ini berlaku walaupun tidak memanggil t1.start(), yang dijangka akan memulakan urutan dan kemudian meneruskan ke baris seterusnya.

Sebab bagi tingkah laku yang tidak dijangka ini terletak pada tanda kurungan mengekor selepas target=self. baca (). Sintaks ini sebenarnya memanggil fungsi self.read() serta-merta dan menghantar nilai pulangan sebagai hujah sasaran kepada pembina Thread. Memandangkan Python menjangkakan fungsi akan diluluskan sebagai sasaran, penyelesaiannya ialah mengalih keluar tanda kurungan mengekor dan secara eksplisit memanggil t1.start() untuk memulakan utas:

import threading

t1 = threading.Thread(target=self.read)
t1.start()
print("something")

Sebagai alternatif, jika fungsi sasaran memerlukan hujah , anda boleh menggunakan argumen args dan kwargs untuk menjalin benang. Ulirkan atau tentukan fungsi lambda untuk dihantar kepada pembina. Ingat bahawa jika anda memilih untuk menggunakan lambda, ia akan mencari fungsi dan hujahnya apabila urutan dijadualkan, bukan apabila lambda ditakrifkan. Ini boleh membawa kepada hasil yang tidak dijangka jika anda menetapkan semula mana-mana pembolehubah sebelum urutan mula dijalankan.

Atas ialah kandungan terperinci Mengapa Thread Saya Berjalan Sebelum Memanggil `Thread.start()` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn