Skip to content

Instantly share code, notes, and snippets.

@mrchoke
Created February 29, 2020 11:02
Show Gist options
  • Save mrchoke/2290da5307940a7cc10197432ac763e4 to your computer and use it in GitHub Desktop.
Save mrchoke/2290da5307940a7cc10197432ac763e4 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')
self.q.put('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