Biasanya cara untuk melakukan ini adalah dengan menggunakan kumpulan utas dan unduhan antrian yang akan mengeluarkan sinyal, alias peristiwa, ketika tugas itu telah selesai diproses. Anda dapat melakukan ini dalam cakupan modul penguliran yang disediakan Python.
Untuk melakukan tindakan tersebut, saya akan menggunakan objek acara dan modul Antrian .
Namun, demonstrasi cepat dan kotor tentang apa yang dapat Anda lakukan dengan threading.Thread
penerapan sederhana dapat dilihat di bawah ini:
import os
import threading
import time
import urllib2
class ImageDownloader(threading.Thread):
def __init__(self, function_that_downloads):
threading.Thread.__init__(self)
self.runnable = function_that_downloads
self.daemon = True
def run(self):
self.runnable()
def downloads():
with open('somefile.html', 'w+') as f:
try:
f.write(urllib2.urlopen('http://google.com').read())
except urllib2.HTTPError:
f.write('sorry no dice')
print 'hi there user'
print 'how are you today?'
thread = ImageDownloader(downloads)
thread.start()
while not os.path.exists('somefile.html'):
print 'i am executing but the thread has started to download'
time.sleep(1)
print 'look ma, thread is not alive: ', thread.is_alive()
Mungkin masuk akal untuk tidak melakukan jajak pendapat seperti yang saya lakukan di atas. Dalam hal ini, saya akan mengubah kodenya menjadi ini:
import os
import threading
import time
import urllib2
class ImageDownloader(threading.Thread):
def __init__(self, function_that_downloads):
threading.Thread.__init__(self)
self.runnable = function_that_downloads
def run(self):
self.runnable()
def downloads():
with open('somefile.html', 'w+') as f:
try:
f.write(urllib2.urlopen('http://google.com').read())
except urllib2.HTTPError:
f.write('sorry no dice')
print 'hi there user'
print 'how are you today?'
thread = ImageDownloader(downloads)
thread.start()
thread.join()
Perhatikan bahwa tidak ada tanda daemon yang disetel di sini.
import threading, time; wait=lambda: time.sleep(2); t=threading.Thread(target=wait); t.start(); print('end')
). Saya berharap "latar belakang" tersirat terlepas juga.