奇怪的Python线程行为

时间:2016-03-16 11:38:05

标签: python multithreading

看到一些难以复制的东西。

简而言之,我将文件中的链接读入列表:

with open(filename) as f:
    LinkList = f.readlines()

此列表中的每个位置都有一个设定点。这些文件是静态的,所以它们不会改变。

site1 = LinkList[1]
site2 = LinkList[2]
site3 = LinkList[3]

这将包含指向该站点的链接或“x”以指示该站点不需要运行。

要跟踪线程是否正在运行,我使用1或0,所以我从

开始
Site1running = 0
Site2running = 0
Site3running = 0

然后我启动线程,如果实际存在链接。原因是我可能稍后将其设置为0并生成一个新线程再次运行。下一部分循环并启动线程开始,如果它们设置为'0',将在稍后重新启动它们。

if True:

  if "google.com" in site1:
    if Site1running == 0:
      Site1running = 1
      GoogleThread = Thread(target = CheckGoogle)
      GoogleThread.start()

  if "Bing.com" in site2:
    if Site2running == 0:
      Site2running = 1
      BingThread = Thread(target = CheckBing)
      BingThread.start()

99%的时间都有效。但是,当我第一次启动剧本时,我发现了一个奇怪的问题。

它正在加载相同的文件。它正在读取文本文件并使链接正常。但它会随机错过启动其中一些线程。不会开始线程的开始,也不会在以后开始。

启动和停止它几次似乎让它工作,所以我假设这是某种时间问题。如果先没有其他事情发生,它有时会启动线程。

似乎发生了越来越多的网站被使用,往往是列表中的更多网站。

真正令人愤怒的部分是启动和停止修复它的事实。它将启动所有线程并在以后继续重新启动它们。

如果有人能对此有所了解,我会非常感激。我唯一能想到的就是在时间上扼杀它。睡觉因为一些奇怪的计时问题是唯一合适的东西。逻辑上我不明白为什么,但我不明白为什么启动和停止它会改变任何东西。

0 个答案:

没有答案