này được nên bị hỏng, tôi hy vọng bạn thương xót với tôi:Làm thế nào để kết hợp callLater và addCallback?
reactor.callLater(0, myFunction, parameter1).addCallback(reactor.stop)
reactor.run()
myFunction
trả về một chậm.
Tôi hy vọng nó là rõ ràng những gì tôi muốn làm:
- ngay sau khi lò phản ứng đang chạy, tôi muốn gọi
myFunction
. Đó là lý do tại sao tôi đang sử dụng 0 làm tham số trễ. Không có cách nào khác ngoại trừ callLater? Có vẻ buồn cười khi vượt qua sự chậm trễ là 0. - Tôi muốn dừng lò phản ứng ngay sau khi
myFunction
hoàn thành nhiệm vụ.
Những vấn đề mà tôi có cho đến nay:
AttributeError: DelayedCall instance has no attribute 'addCallback'
. Đủ công bằng! Làm thế nào để đặt một cuộc gọi lại trong chuỗi gọi lại bắt đầu bằngmyFunction
sau đó?exceptions.TypeError: stop() takes exactly 1 argument (2 given)
.
Để giải quyết vấn đề thứ hai tôi đã phải xác định một chức năng đặc biệt:
def stopReactor(result):
gd.log.info('Result: %s' % result)
gd.log.info('Stopping reactor immediatelly')
reactor.stop()
Và thay đổi mã để:
reactor.callLater(0, myFunction, parameter1).addCallback(stopReactor)
reactor.run()
(vẫn không làm việc vì vấn đề callLater, nhưng stopReactor
sẽ hoạt động ngay bây giờ)
Có thực sự không có cách nào khác để gọi reactor.stop
ngoại trừ bằng de fining một chức năng phụ?
Tôi thấy tùy chọn này rất dễ đọc. Các bit 'lambda bỏ qua 'trông kỳ diệu với tôi: bạn có thể làm rõ những gì nó chính xác không? – dangonfast
Các cuộc gọi lại trên hoãn lại được gọi với một đối số. 'reactor.stop' không có bất kỳ đối số nào. 'lambda bị bỏ qua: reactor.stop()' chấp nhận và đối số, bỏ qua nó và gọi 'reactor.stop' mà không có đối số. –
Nó sẽ là một chút thông thường hơn để viết: 'lambda _: reactor.stop' – DonGar