Skip to content

Instantly share code, notes, and snippets.

@mrchoke
Last active February 29, 2020 11:01
Show Gist options
  • Save mrchoke/b1bdc322557ff3f216875d93b3d519e7 to your computer and use it in GitHub Desktop.
Save mrchoke/b1bdc322557ff3f216875d93b3d519e7 to your computer and use it in GitHub Desktop.
ปิด thread เมื่อข้อมูลโดนประมวลผลเสร็จแล้ว ตัวอย่างนี้จะเป็นตัวอย่างที่ไม่ปิด เมื่อทำงานเสร็จ
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