我是用Python开始的,过去在VB中做了很多编程。 Python似乎更容易使用,功能更强大。我完全放弃了Windows,并且有很多我编写过的VB程序,并希望在Linux上使用它们而不必触及涉及Windows的任何内容。
我试图将我的一个VB程序转换为Python。我想我差点儿。
我在VB中找不到办法的一件事就是使用程序1(一个调用程序)来调用程序2并多次运行它。我有一个程序可以搜索网站寻找新的更新材料,所有内容都以数字方式更新(例如1234567890_1.mp3)。并非每个值都被使用,我必须搜索以查找存在哪些文件以及哪些文件没有。通常,该站点每天将运行大约100,000个可能的文件,实际上每天只使用2-3个文件。我将程序设置为搜索10,000个文件,如果找到存在的文件,则将其下载,然后移动到下一个可能的文件并进行测试。我会同时运行这个程序10次并将每个程序设置为搜索单独的10,000个文件块。我一直想设置它,这样我就可以有一个调用程序,让用户设置主块(1234)和辅助块(5),辅助块可能是一系列值。然后,呼叫程序将启动10个单独的程序(实际上为6,错误0-9),并使用主块和辅助块作为值来为10个程序2中的每一个设置呼叫。当10个程序中的每个程序都被调用时,所有程序都在同一时间运行,它们将被调用相应的搜索位置,以便他们搜索网站以查找前一天添加的新文件。如果我在一个长连续程序中完成所有操作,那么每天完成只需要35-45分钟而不是多个小时。
我想我可以使用程序1(设置)和程序2(读取).txt文件使用Python。我不确定在程序2读取值并开始使用之前,是否可能会遇到更改设定值的问题。我想我会在程序中添加一个暂停来安全地播放...我不太确定。
我是否有另一种方法可以将程序1中的值传递给程序2以完成我想要完成的任务?
答案 0 :(得分:0)
拥有一个主类(一个你可以调用它的块)似乎很简单,它将包含列表中的所有不同线程/类。沟通方面,可以简单地建立一种沟通结构:
Thread <--> Master <--> Thread
或
Thread <---> Thread <---> Thread
后者看起来更像是一个网络结构。
由于你有一个“中间人”,第一个选项可能会有点复杂。但是,这确实允许大规模通信。此外,所有需要传递给其他类的是Master类,或者是一个提供通信的函数
第二个选项允许线程之间的直接通信。因此,如果有两个线程需要一起工作,并且您不希望必须处理可能与命令交互的其他线程,那么第二个选项是最好的。但是,必须将类列表发送到函数。
无论哪种方式,您都需要在通信的中心处拥有主线程(出于简单原因)。否则你可以进入袜子和文件,但另一个更快,更有效,并且不太可能引起头痛。
希望你明白我在说什么。这都是理论上的,但我在我的程序中使用了类似的系统。
答案 1 :(得分:0)
有很多方法可以做到这一点;可能最简单的方法是使用os.spawnv
来运行Program2的多个实例并将适当的值传递给每个实例,即
import os
import sys
def main(urlfmt, start, end, threads):
start, end, threads = int(start), int(end), int(threads)
per_thread = (end - start + 1) // threads
for i in range(threads):
s = str(start + i*per_thread)
e = str(min(s + per_thread - 1, end))
outfile = 'output{}.txt'.format(i+1)
os.spawnv(os.P_NOWAIT, 'program2.exe', [urlfmt, s, e, outfile])
if __name__=="__main__":
if len(sys.argv) != 4:
print('Usage: web_search.py urlformat start end threads')
else:
main(*(sys.argv))