我的代码所做的是生成X数量的随机行,每行都是X的长度
我的程序快要完成了,但是我没时间工作,更确切地说,是从函数中删除它,我知道它可以正确计算时间,因为如果我将打印内容放在中断部分,它实际上会打印时间,但是当我想在函数外部使用它时,它永远不会被定义]
我尝试了很多东西,比如将其全球化到函数,外部函数(它不会从0改变,这意味着该函数由于某种原因未更改变量),尝试了浮点,并尝试添加了行elapsed = MainCode()
,但都没用,我花了大约6个小时来解决这个问题,其中3个小时与Python的官方不和谐服务器上的其他程序员一起寻求额外的帮助,所有这些问题也让我感到困惑,为什么它仍然没有被定义]
这是我的完整代码,感谢您的帮助
import random
import string
import multiprocessing
import os
import sys
import time
if __name__ == "__main__":
lines_wanted = input("input how many lines: ") #user can input how many lines he wants
length = input("How long: ") #user can enter how long each line should be
def MainCode(lines_wanted, length):
global elapsed
elapsed = 0.0
starttime = time.time() # start the time
file = open("blablabla.txt", "a",) # open/create the file
i = 0
while 1 == 1:
file.write(''.join(random.choice(string.ascii_letters + string.digits + ".") for i in range(int(length))) + "\n") # write the randomly generated lowercase string
i += 1 * multiprocessing.cpu_count() # count how many lines the loop is on
if i >= int(lines_wanted): # If it reaches the lines it would stop writing
endtime = time.time() # stop the time
elapsed = endtime - starttime #calculate the time
return elapsed
break
processes = []
if __name__ == '__main__':
for _ in range(multiprocessing.cpu_count()):
p = multiprocessing.Process(target=MainCode, args=(lines_wanted, length))
p.start()
processes.append(p)
for process in processes:
process.join()
elapsee = MainCode()
if __name__ == "__main__": # Prints this after finshing the func above
print(f"Finished Writting {lines_wanted} lines, took {elapsee:.1f} to generate")
我的代码所做的是生成X数量的随机行,每行都是X的长度。我的程序快要完成了,但是我没时间工作,更具体地说,是从函数I ..中删除它。 。
首先,您尝试打印“过去”而不是“过去”。
elapsed
仅由MainCode
写入,仅在由multiprocessing.Process
开始的子过程中调用。在不同的过程中,您的主程序没有机会观察这些变量。与线程不同,子进程不共享您的名称空间。因此,您想以某种方式传达价值。这可以通过multiprocessing.Pool
方便地处理: