Last active
February 29, 2020 11:01
-
-
Save mrchoke/b1bdc322557ff3f216875d93b3d519e7 to your computer and use it in GitHub Desktop.
ปิด thread เมื่อข้อมูลโดนประมวลผลเสร็จแล้ว ตัวอย่างนี้จะเป็นตัวอย่างที่ไม่ปิด เมื่อทำงานเสร็จ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import threading | |
import queue | |
import time | |
import signal | |
import sys | |
from datetime import datetime | |
class myThreading(): | |
def __init__(self, n=3): | |
self.nprocess = n | |
self.threads = [] | |
self.q = queue.Queue() | |
def start(self): | |
for i in range(self.nprocess): | |
t = threading.Thread(target=self.worker, args=(str(i), )) | |
self.threads.append(t) | |
t.start() | |
def putQ(self, data): | |
self.q.put(data) | |
def worker(self, n): | |
print('Start:', n) | |
while True: | |
if not self.q.empty(): | |
data = self.q.get() | |
if data != 'END': | |
self.process(n, data) | |
self.q.task_done() | |
time.sleep(1) | |
if data == 'END' and self.q.empty(): | |
print('Worker:', n, ' END') | |
break | |
def process(self, i, data): | |
print("Process by:", i, ' Data:', data, ' Current:', datetime.now()) | |
def signal_handler(self, signal, frame): | |
print('You pressed Ctrl+C!') | |
sys.exit(0) | |
if __name__ == "__main__": | |
threads = myThreading(3) | |
threads.start() | |
signal.signal(signal.SIGINT, threads.signal_handler) | |
for i in range(10): | |
threads.putQ(datetime.now()) | |
threads.putQ('END') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment