Hướng dẫn python run function in background - chức năng chạy python trong nền

Thông thường cách để làm điều này là sử dụng một nhóm luồng và tải xuống hàng đợi sẽ phát hành tín hiệu, a.k.a một sự kiện, khi nhiệm vụ đó đã hoàn thành xử lý. Bạn có thể làm điều này trong phạm vi của mô -đun luồng Python cung cấp.

Để thực hiện các hành động đã nói, tôi sẽ sử dụng các đối tượng sự kiện và mô -đun hàng đợi.

Tuy nhiên, một minh chứng nhanh chóng và bẩn thỉu về những gì bạn có thể làm bằng cách sử dụng triển khai threading.Thread đơn giản dưới đây:

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()

Có lẽ sẽ có ý nghĩa khi không thăm dò ý kiến ​​như tôi đang làm ở trên. Trong trường hợp đó, tôi sẽ thay đổi mã thành điều này:

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()
# show message
thread.join()
# display image

Lưu ý rằng không có cờ daemon được đặt ở đây.

Hướng dẫn python run function in background - chức năng chạy python trong nền

Bên dưới một đoạn mã nhỏ để chạy các phương thức lớp như các luồng nền trong Python. Phương thức Run () thực hiện một số hoạt động mãi mãi và trong trường hợp sử dụng này, bạn muốn nó làm điều đó trong nền. Trong khi phần còn lại của ứng dụng tiếp tục hoạt động của nó.

import time

import threading


class TestThreading(object):
    def __init__(self, interval=1):
        self.interval = interval

        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True
        thread.start()

    def run(self):
        while True:
            # More statements comes here
            print(datetime.datetime.now().__str__() + ' : Start task in the background')

            time.sleep(self.interval)

tr = TestThreading()
time.sleep(1)
print(datetime.datetime.now().__str__() + ' : First output')
time.sleep(2)
print(datetime.datetime.now().__str__() + ' : Second output')

Dưới đây là đầu ra:

2018-08-18 13: 39: 59.021000: Nhiệm vụ bắt đầu trong nền 2018-08-18 13: 40: 00.036000: Đầu ra đầu tiên 2018-08-18 13: 40: 00.036000: Nhiệm vụ bắt đầu trong nền 2018-08-18 13: 40: 01.036000: Nhiệm vụ bắt đầu trong nền 2018-08-18 13: 40: 02.036000: Đầu ra thứ hai
2018-08-18 13:40:00.036000 : First output
2018-08-18 13:40:00.036000 : Start task in the background
2018-08-18 13:40:01.036000 : Start task in the background
2018-08-18 13:40:02.036000 : Second output

👀 Chỉ muốn ẩn nấp?

Bạn vẫn có thể tạo một tài khoản và bật các tính năng như chế độ tối.dark mode.