Hôm nay chúng ta sẽ đi vào bài 1.4: Làm việc với thread trong Python. Nào chúng ta cùng bắt tay vào làm việc thôi:
Mỗi một process có ít nhất 1 thread. Một process cũng có thể bắt đầu nhiều threads. Hệ điều hành thực thi các thread giống như các "processes" song song. Trên 1 bộ xử lý duy nhất, nó được thực hiện bằng hai cách: "thread scheduling" hoặc "timeslicing".
Ưu điểm của thread:
2. Mô đun thread
Để sử dụng module này các bạn cần import nó vào trong chương trình:
nó có thể thực hiện các chức năng trong một chủ đề riêng biệt. Để sử dụng, bạn có thể gọi phương thức thread.start_new_thread:
Phương thức này bắt đầu một thread mới và trả về định danh (ID) của nó. Các chủ đề thực hiện function với danh sách các đối số ( nạp vào list hoặc tuple ). Khi hàm trả về, các thread sẽ âm thầm thoát. Khi function kết thức với một exception không được xử lý, một chồng dấu vết được in và sau đó thoát chủ đề (các chủ đề khác vẫn hoạt động).
Ví dụ về sử dụng module thread:
3.Module threading
Để sử dụng module này các bạn cần import nó vào trong chương trình:
Để bắt đầu 1 thread với module threading chúng ta có thể sử dụng phương thức Thread của nó:
Với module threading thì chúng ta có thể đặt tên riêng cho từng thread:
Ngoài ra còn rất nhiều điều cần tìm hiểu nữa về thread nhưng ở đây mình không thể nói hết được. Mong các bạn có thể tìm hiểu thêm qua document của python. Sau đây là bài tập nhỏ về phần này:
1. Tổng quan về thread
Một "Thread" hay một "Thread of Execution" được định nghĩa trong khoa học máy tính là đơn vị nhỏ nhất có thể lập lịch trình trong hệ điều hành. Thread thường được tạo bởi một rẽ nhánh của một kịch bản máy tính hoặc một chương trình hai hay nhiều nhiệm vụ song song (được thực hiện trên 1 vi xử lý bằng cách đa nhiệm). Thread thường được chứa trong một processes. Nhiều hơn 1 thread có thể cùng tồn tại trong một process. Các thread chia sẻ bộ nhớ và trạng thái của process. Hay nói cách khác: chúng chia sẻ code hoặc hướng dẫn và các giá trị của biến.
Có 2 loại Thread khác nhau:
Một "Thread" hay một "Thread of Execution" được định nghĩa trong khoa học máy tính là đơn vị nhỏ nhất có thể lập lịch trình trong hệ điều hành. Thread thường được tạo bởi một rẽ nhánh của một kịch bản máy tính hoặc một chương trình hai hay nhiều nhiệm vụ song song (được thực hiện trên 1 vi xử lý bằng cách đa nhiệm). Thread thường được chứa trong một processes. Nhiều hơn 1 thread có thể cùng tồn tại trong một process. Các thread chia sẻ bộ nhớ và trạng thái của process. Hay nói cách khác: chúng chia sẻ code hoặc hướng dẫn và các giá trị của biến.
Có 2 loại Thread khác nhau:
- Kernel threads
- User-space Threads or user threads
Mỗi một process có ít nhất 1 thread. Một process cũng có thể bắt đầu nhiều threads. Hệ điều hành thực thi các thread giống như các "processes" song song. Trên 1 bộ xử lý duy nhất, nó được thực hiện bằng hai cách: "thread scheduling" hoặc "timeslicing".
Ưu điểm của thread:
- Chương trình đa luồng (multi-thread) có thể chạy nhanh hơn trên các hệ thống máy tính với nhiều CPU, bởi vì các thread có thể được thực hiện đồng thơi.
- Một chương trình có thể đáp ứng với đầu vào. Điều này đúng với trên 1 CPU hoặc nhiều CPU.
- Một thread của một process có thể chia sẻ bộ nhớ của các biến toàn cầu. Nếu một biến toàn cầu được thay đổi trong một thread, sự thay đổi này sẽ có hiệu lực cho tất cả các thead. Ngoài ra, các thread có các biến cục bộ, sự thay đổi các biến cục bộ này chỉ có hiệu lực trong nội bộ thread.
- thread
- threading
2. Mô đun thread
Để sử dụng module này các bạn cần import nó vào trong chương trình:
Code:
import thread
Code:
thread.start_new_thread(function, args[, kwargs])
Ví dụ về sử dụng module thread:
Code:
#!/usr/bin/env python import thread import time def worker_thread(id): print "\nThis is thread %d" % id count =1 while True: print "\nThread with ID %d has counter value %d"%(id, count) time.sleep(2) count +=1 for i in range(5): thread.start_new_thread(worker_thread, (i,)) print "Main thread going for infinite wait loop" while True: pass
Để sử dụng module này các bạn cần import nó vào trong chương trình:
Code:
import threading
Code:
import threading def worker(num): """thread worker function""" print 'Worker: %s' % num return threads = [] for i in range(5): t = threading.Thread(target=worker, args=(i,)) threads.append(t) t.start()
Code:
import threading import time def worker(): print threading.currentThread().getName(), 'Starting' time.sleep(2) print threading.currentThread().getName(), 'Exiting' def my_service(): print threading.currentThread().getName(), 'Starting' time.sleep(3) print threading.currentThread().getName(), 'Exiting' t = threading.Thread(name='my_service', target=my_service) w = threading.Thread(name='worker', target=worker) w2 = threading.Thread(target=worker) # use default name w.start() w2.start() t.start()
- Viết một chương trình scan port sử dụng phương thức syn scan. Trong chương trình sử dụng kỹ thuật đa luồng (muti-thread) để tăng tốc độ của chương trình.
Code:
#!/usr/bin/env python from sys import argv import socket import threading script, host = argv #address = str(host) address = socket.gethostbyname(host) ports = [] class scan_thread(threading.Thread): def __init__(self, startPort, endPort, ports): threading.Thread.__init__(self) self.startPort = startPort self.endPort = endPort def run(self): while self.startPort <= self.endPort: s = socket.socket() s.settimeout(.3) result = s.connect_ex((address,self.startPort)) if result == 0: #Connect successful print "Port: ", self.startPort, " is Open" ports.append(self.startPort) self.startPort += 1 s.close() print "Scaning all port...." port = 0 threads = [] while port <60000: t = scan_thread(port,port+5000, ports) t.start() threads.append(t) port += 5000 for t in threads: t.join() if len(ports) == 0: print "All port is close." else: ports.sort() print "Port open: ", ports
No comments:
Post a Comment