সাধারণত এটি করার উপায় হ'ল একটি থ্রেড পুল এবং কাতার ডাউনলোডগুলি ব্যবহার করা হবে যা কোনও কাজটি যখন প্রক্রিয়া শেষ করে শেষ করে, তখন একটি ইভেন্ট, যেমন একটি ইভেন্ট জারি করবে। পাইথন যে থ্রেডিং মডিউলটি সরবরাহ করে তার সুযোগের মধ্যে আপনি এটি করতে পারেন ।
বলেছে ক্রিয়া সম্পাদন করতে, আমি ইভেন্ট অবজেক্ট এবং কুই মডিউলটি ব্যবহার করব ।
তবে, একটি সাধারণ threading.Threadবাস্তবায়ন ব্যবহার করে আপনি কী করতে পারেন তার একটি তাত্পর্যপূর্ণ এবং মলিন প্রদর্শন নীচে দেখা যাবে:
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()
আমি উপরের মতো করে পোল না করে এটি সম্ভবত বোধগম্য হবে। কোন ক্ষেত্রে, আমি কোডটিতে এই পরিবর্তন করব:
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()
লক্ষ্য করুন যে এখানে কোনও ডেমন পতাকা সেট করা নেই।
import threading, time; wait=lambda: time.sleep(2); t=threading.Thread(target=wait); t.start(); print('end'))। আমি আশা করছিলাম "ব্যাকগ্রাউন্ড" এছাড়াও বিচ্ছিন্নভাবে প্রচ্ছন্ন।