Tôi có một chương trình python với 2 luồng (hãy đặt tên cho chúng là 'nguồn' và 'đích'). Chuỗi nguồn đôi khi đăng thông báo đến đích luồng với một số đối số. So với chủ đề đích chọn một tin nhắn, nó phải gọi một hàm tương ứng với các di tích được lưu trong tin nhắn.cách đặt hàm và đối số vào hàng đợi python?
Nhiệm vụ này có thể được giải quyết theo nhiều cách. Một cách dễ dàng là tu đặt một lớn 'nếu ... if..if' trong chu trình chọn thư của chuỗi đích và gọi hàm theo kiểu thông báo nhận được và đối số đã lưu. Nhưng điều này sẽ dẫn đến amounf lớn của mã (hoặc bảng tra cứu lớn) và thêm tin nhắn/chức năng xử lý mới sẽ phát triển bước bổ sung để viết mã trong chu kỳ chọn tin nhắn.
Kể từ khi xử lý trăn chức năng như các đối tượng hạng nhất và có tuples, tôi muốn để đặt một chức năng và argumens bên trong một thông điệp, vì vậy so với chủ đề đến nhặt nhắn nó chỉ cần gọi một functon lưu trong moto tin nhắn mà không cần bất kỳ kiến thức chức năng của nó là gì.
tôi có thể viết một mã cho một chức năng với số lượng nhất định đối số:
from Queue import *
from thread import *
from time import *
q = Queue()
def HandleMsg(arg1, arg2) :
print arg1, arg2
def HandleAnotherMsg(arg1, arg2, arg3) :
print arg1, arg2, arg3
def DestinationThread(a) :
while True :
(f, a, b) = q.get()
f(a, b)
start_new_thread(DestinationThread, (0,))
print "start"
sleep(1)
q.put((HandleMsg, 1, 2))
sleep(1)
print "stop"
Câu hỏi đặt ra là: làm thế nào để sửa đổi một mã số vì vậy tôi có thể đặt() một hàm với bất kỳ số lượng các đối số trong hàng đợi ? ví dụ HandleAnotherMsg()? Sử dụng q.put ((HandleAnotherMsg, 1, 2, 3)) sẽ tăng lên một lỗi biên dịch :(
Bạn có thể đăng lỗi bạn đang nhận được không? –