基本的に、私はいくつかの番号付きオプションから選択できるアプリケーションを構築しています。
main.pyという名前が付けられています。モジュールを個別に実行できるように、可能なオプションごとにスタンドアロン モジュールを作成しました。今私が書いたこの1つのモジュールには、スレッド化されたクラスが含まれています。コマンドを実行するときに発生する問題python mod_keepOnline.py
は、制御が端末 |AND| に返されないことです。モジュールを介してmain.pyを実行すると、main.pyは選択する新しい選択肢のリッスンを停止します。スレッドのせいだとわかっています。どうすれば「スレッドが生成された後、スレッドに独自のスレッドを管理させる」ことができるのだろうと思っていました。mod_keepOnline.py
したがって、制御を端末またはメイン スクリプトに戻します。
また、解放されたスレッドを再び強制終了できるようにしたいと考えています。
何かのようなものmod_keepOnline.py -killAll
ええと、私のコードは次のとおりです。
###########################################
################## SynBitz.net ############
import threading
import objects
import time
import mechanize
import os
import gb
##########################################
class Class_putOnline (threading.Thread):
def __init__ (self,person,onlineTime):
threading.Thread.__init__ (self)
self.startTime = time.time()
self.alive = True
self.person = person
self.onlineTime = onlineTime
self.firstMessage=True
def run(self):
while(self.alive):
if(self.firstMessage):
print self.person.getInfo() + " SPAWNED ONLINE"
self.firstMessage=False
self.person.login()
time.sleep(300)
self.person.logout()
if((time.time()-self.startTime) > self.onlineTime):
print self.person.getInfo() + " SPAWNED OFFLINE "
self.alive = False
self._Thread__stop()
#########################################
def main():
for line in open(gb.accFile,"r"):
gb.accountList.append(line.rstrip('\n'))
for account in gb.accountList:
gb.accountInfo = account.split('|',4)
browser = mechanize.Browser()
browser.set_handle_robots(False)
browser.set_handle_redirect(True)
browser.set_handle_referer(True)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
gb.spiderList.append(objects.spider.Bot(gb.accountInfo[0],gb.accountInfo[2],gb.accountInfo[1],gb.accountInfo[3],browser))
if gb.accountInfo[2] not in gb.distros:
gb.distros.append(gb.accountInfo[2])
onlineAccounts = []
for index, acc in enumerate(gb.spiderList):
onlineAccounts.append(Class_putOnline(acc,115200)) # 600*6*8*4= 28800 = 8 uur 3600 test seconds = 1 h (1200 seconds for test time of 20 minutes... )
time.sleep(0.1)
onlineAccounts[index].start()
if __name__ == "__main__":
main()
サーバーへの ssh セッションを開いて Python スクリプトを実行すると、バックグラウンドで実行しても、セッションを閉じると終了します。接続していないときにスクリプトを実行し続けるにはどうすればよいですか?