Python “连续的”;用开放的;在打开的第二个文件上没有写入

Python “连续的”;用开放的;在打开的第二个文件上没有写入,python,Python,我试图循环浏览字典列表,并将值写入文本文件。在我的代码中,写入“blockchain.txt”的第一个“with open”可以正常工作,但写入“mining_queue.txt”的第二个“with open”不起作用。它不会抛出错误,只是无法写入。对于上下文,为了使嵌套循环完全循环,我在正在循环的挖掘队列列表中放置了一个空字典。这会不会导致它无法写出剩下的内容,即使之后有更多完整的词典?(我也尝试过过滤任何空字典,甚至不执行第二个循环) 我的代码: def make_file(): w

我试图循环浏览字典列表,并将值写入文本文件。在我的代码中,写入“blockchain.txt”的第一个“with open”可以正常工作,但写入“mining_queue.txt”的第二个“with open”不起作用。它不会抛出错误,只是无法写入。对于上下文,为了使嵌套循环完全循环,我在正在循环的挖掘队列列表中放置了一个空字典。这会不会导致它无法写出剩下的内容,即使之后有更多完整的词典?(我也尝试过过滤任何空字典,甚至不执行第二个循环)

我的代码:

def make_file():
    with open("blockchain.txt", "w") as f:
        for i in blockchain:
            for j in i.values():
                f.write(str(j) + " ")
            f.write("\n")
    with open("mining_queue.txt", "w") as f:
        for i in mining_queue:
            for j in i.values():
                f.write(str(j) + " ")
            f.write("\n")
(“区块链”和“挖掘队列”都是用字典填充的列表)

我的问题:为什么第二个“with open”不向“mining_queue.txt”写入任何内容?

Edit:当循环命中完整dict时,它也不会写入任何内容。(更多上下文)

编辑,续:这里是一个最小的可复制示例:

import hashlib
import time
from multiprocessing import Value, Process


blockchain = [{"send": "0000000000000000", "receive": "0000000000000001", "amount": 10, "time": time.time(), "verify": hashlib.sha256((str(time.time()) + "asdsadaosidoa09").encode("UTF-8")).hexdigest(), "last_key": 10, "key": 10}]
mining_queue = [{}]

def make_file():
    with open("blockchain.txt", "w") as f:
        for i in blockchain:
            for j in i.values():
                f.write(str(j) + " ")
            f.write("\n")
    with open("mining_queue.txt", "w") as f:
        for i in mining_queue:
            for j in i.values():
                f.write(str(j) + " ")
            f.write("\n")

mining_queue.append(blockchain[0])

def loop(x):
    while True:
        make_file()
        time.sleep(5)

if __name__ == "__main__":
    loop_on = Value("b", True)
    p = Process(target=loop, args=(loop_on,))
    p.start()
    p.join()
这基本上与我的完整源代码完全相同,但其他所有不需要的后端都被剥离了。运行至少10秒的结果如下: “blockchain.txt”: 000000000000000000000000001 10 1621218521.4516537 48418cfdc364ed3f8750fa33d40c7be8c59a964635852089c5c65e7841a2f53f 10

“mining_queue.txt”: 此处完全为空

这使我认为这是多重处理。
如何使用原始进程而不是新进程中的项目列表?

如果
挖掘队列
只有一个空的dict,则内部for循环将不会运行——没有要循环的值,这意味着将不会有写入操作。在不写任何东西之后,你希望该文件中有什么?@Mark我不希望它用空的dict写任何东西。我的问题是,即使我知道循环命中了一个完整的dict,它也不会写任何东西。我不认为我在我的问题中添加了这一点,因为我很糟糕。如果你举一个其他人可以运行的例子,那会很有帮助,这就产生了问题。否则任何人都只能猜测。。。。也就是说,一个合适的命令会硬编码一个非空的命令。这意味着
挖掘队列
是空的,即使你坚持它不是空的。