Với Python documentation cho Thread.run()
:python Overriding threading.Thread.run()
You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.
tôi đã xây dựng đoạn mã sau:
class DestinationThread(threading.Thread):
def run(self, name, config):
print 'In thread'
thread = DestinationThread(args = (destination_name, destination_config))
thread.start()
Nhưng khi tôi thực hiện nó, tôi nhận được lỗi sau :
Exception in thread Thread-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
self.run()
TypeError: run() takes exactly 3 arguments (1 given)
Có vẻ như tôi thiếu điều gì đó hiển nhiên, nhưng các ví dụ khác nhau Tôi đã thấy công việc với phương pháp này. Cuối cùng tôi đang cố gắng truyền chuỗi và từ điển vào trong chuỗi, nếu Constructor không đúng, nhưng để tạo một hàm mới để thiết lập các giá trị trước khi bắt đầu luồng, tôi mở nó ra.
Bất kỳ đề xuất nào về cách thực hiện tốt nhất điều này?
Đây là một thông tin quan trọng mà tôi đã bỏ lỡ, đó là lý do tại sao tôi chấp nhận nó, nhưng trong trường hợp của tôi, tôi thực sự đang mở rộng lớp thêm các chức năng cần thiết để kéo dữ liệu ra khỏi luồng. –
Hàng nghìn lần có. Tôi phải giải thích điều này rất nhiều cho các nhà phát triển Java. –
Bạn thậm chí không cần args = (arg1, arg2). Chỉ cần làm target = functools.partial (myfunc, arg1, arg2). – Phob