ทำความเข้าใจกับการรวมเธรดและคิวใน Python

ฉันเริ่มมองหาการสร้างเธรดใน Python ฉันค้นหาตามทฤษฎีก่อนเพื่อทำความเข้าใจว่า Threads ทำงานอย่างไรใน Python ฉันยังได้อ่านเกี่ยวกับการใช้ Queue ใน Python และวิธีที่สามารถช่วยแก้ไขปัญหา Threading เล็กน้อยได้ ฉันสามารถเข้าใจรหัสแยกกันสำหรับแต่ละรายการได้ จากนั้นฉันก็เจอบทช่วยสอนต่อไปนี้:

http://www.ibm.com/developerworks/aix/library/au-threadingpython/

โดยแสดงความเกี่ยวข้องของ Thread และ Queue ใน Python และวิธีที่สามารถเร่งกระบวนการดำเนินการภายใต้สถานการณ์บางอย่างได้

ฉันมีปัญหาในการทำความเข้าใจโค้ดบางส่วน

def main():

        #spawn a pool of threads, and pass them queue instance 
        for i in range(5):
          t = ThreadUrl(queue)
          t.setDaemon(True)
          t.start()

       #populate queue with data   
          for host in hosts:
            queue.put(host)

       #wait on the queue until everything has been processed     
       queue.join()

      main()
      print "Elapsed Time: %s" % (time.time() - start)

ใน for loop แรก จะมีการสร้างเธรดหลายรายการและส่งอินสแตนซ์คิวไปให้เธรดนั้น แต่จากความเข้าใจของผมตอนนี้คิวยังว่างอยู่

ใน for loop ถัดไป

for host in hosts:

ค่าโฮสต์จะถูกผลักเข้าไปในคิว ตอนนี้ข้อมูลคิวนี้ถูกกำหนดให้กับเธรดอย่างไร

สุดท้ายนี้ การใช้ queue.join() ที่เกี่ยวข้องกับโปรแกรมนี้คืออะไร


person abhinav singh    schedule 10.11.2014    source แหล่งที่มา


คำตอบ (1)


"ใน for loop แรก จะมีการสร้างเธรดหลายรายการและส่งอินสแตนซ์คิวไปให้ แต่จากความเข้าใจของฉัน คิวยังว่างเปล่าในขณะนี้"

ใช่ เธรดได้เริ่มต้นแล้ว แต่ยังไม่มีงานที่ต้องทำ

for host in hosts:

"ค่าโฮสต์ถูกผลักเข้าไปในคิว ตอนนี้ข้อมูลคิวนี้ถูกกำหนดให้กับเธรดอย่างไร"

โดยอินสแตนซ์คิว

"การใช้ queue.join() ที่เกี่ยวข้องกับโปรแกรมนี้คืออะไร"

join ทำให้โปรแกรมของคุณรอจนกว่าเธรดจะเสร็จสิ้นการประมวลผลทั้งหมด และเอาต์พุตจะถูกรวบรวมโดยอินสแตนซ์คิว โปรแกรมของคุณจะบล็อค ณ จุดนี้จนกว่าคิวจะเสร็จสิ้น

person Anentropic    schedule 10.11.2014