从Python中的函数中获取变量的怪异问题

问题描述 投票:0回答:2

我的代码所做的是生成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 ..中删除它。 。

python variables
2个回答
0
投票

首先,您尝试打印“过去”而不是“过去”。


0
投票

elapsed仅由MainCode写入,仅在由multiprocessing.Process开始的子过程中调用。在不同的过程中,您的主程序没有机会观察这些变量。与线程不同,子进程不共享您的名称空间。因此,您想以某种方式传达价值。这可以通过multiprocessing.Pool方便地处理:

© www.soinside.com 2019 - 2024. All rights reserved.