तो मैं डेल्यूज के साथ उपयोग करने के लिए एक छोटी लिपि लिख रहा हूं। डिल्यूज ट्विस्ट का उपयोग करता है, और मुझे वास्तव में यह समझ में नहीं आता कि यह कैसे काम करता है। आम तौर पर मैं बस इसके बारे में अधिक जानकारी देखता हूं, लेकिन ट्विस्ट के साथ शुरू करने से लंबा समय लगेगा और इस छोटी परियोजना के दायरे से बाहर है। तो मैंने सोचा कि मैं बस यहां पूछूंगा।घुमावदार रिएक्टर बंद कर दिया गया है, लेकिन कार्यक्रम खत्म नहीं होता है?
अब, मेरे पास यह कोड है। मैं specifig भागों मैं के साथ
import base64
import processargs
from deluge.ui.client import client
from twisted.internet import reactor
from deluge.log import setupLogger
setupLogger()
options = processargs.readConfig(os.path.expanduser("~/.deluge-automator"))
d = client.connect(
host=options['host'],
port=int(options['port']),
username=options['username'],
password=options['password']
)
def start():
#other code
t = client.core.add_torrent_file(tfile,
base64.encodestring(data), None)
t.addCallback(on_torrent_added_success, tfile)
t.addErrback(on_torrent_added_fail)
def handle_stop_signal(SIGNAL, stack):
client.disconnect()
reactor.stop()
def on_torrent_added_success(result, tfile):
#other code
start()
def on_torrent_added_fail(result):
print "Add torrent failed!"
print "result: ", result
def on_connect_success(result):
#other code
start()
d.addCallback(on_connect_success)
def on_connect_fail(result):
print "Connection failed!"
print "result: ", result
d.addErrback(on_connect_fail)
signal.signal(signal.SIGTERM, handle_stop_signal)
signal.signal(signal.SIGINT, handle_stop_signal)
reactor.run()
जब एक धार को सफलतापूर्वक जोड़ रहा है, यह (शुरू करने के लिए) के लिए वापस जाना चाहिए मदद की जरूरत समझाने की कोशिश करेंगे, और यह करता है, लेकिन मैं इसे रिएक्टर या कुछ खो देता है लगता है।
± % python2 main.py
Connection was successful!
result: 10
^C^CConnection failed!
result: [Failure instance: Traceback: <class 'twisted.internet.error.ReactorNotRunning'>: Can't stop reactor that isn't running.
/usr/lib/python2.7/site-packages/twisted/internet/defer.py:551:_runCallbacks
/usr/lib/python2.7/site-packages/deluge/ui/client.py:412:__on_login
/usr/lib/python2.7/site-packages/twisted/internet/defer.py:368:callback
/usr/lib/python2.7/site-packages/twisted/internet/defer.py:464:_startRunCallbacks
--- <exception caught here> ---
/usr/lib/python2.7/site-packages/twisted/internet/defer.py:551:_runCallbacks
main.py:70:on_connect_success
main.py:32:start
main.py:49:handle_stop_signal
/usr/lib/python2.7/site-packages/twisted/internet/base.py:577:stop
]
तो रिएक्टर बंद कर दिया जाता है, लेकिन यह कार्यक्रम छोड़ने नहीं करता है: अब जब भी यह एक SIGTERM या SIGINT, रिएक्टर बंद प्राप्त करता है, लेकिन कार्यक्रम छोड़ने नहीं करता है। मुझे कीबोर्ड दो बार बाधित करना है। एक बार रिएक्टर को रोकने के लिए, और त्रुटि फेंकने के लिए दूसरी बार। क्या इस तरह एक लूप स्थापित करने का कोई निश्चित तरीका है?
बस उसमें जोड़ना चाहते हैं कि सिग्नल हैंडलर के अंदर ट्विस्ट एपीआई को कॉल करने के लिए यह सुरक्षित नहीं है *। सिग्नल हैंडलर प्रीपेप्टिव संदर्भ स्विचिंग का एक रूप हैं, वे धागे के रूप में असुरक्षित हैं और सावधानी से इलाज किया जाना चाहिए। थ्रेड-सुरक्षित के रूप में चिह्नित केवल ट्विस्ट एपीआई सिग्नल हैंडलर में उपयोग किए जा सकते हैं (जिनमें से सबसे दिलचस्प 'reactor.callFromThread') है। –
पूरी तरह से काम करता है, बहुत बहुत धन्यवाद! – mrobinson7627