Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 让两个类打开同一个文件是个坏主意?_Python_File - Fatal编程技术网

Python 让两个类打开同一个文件是个坏主意?

Python 让两个类打开同一个文件是个坏主意?,python,file,Python,File,我的Python程序中有两个类,其中一个是线程。让两个类打开同一个日志文件并写入是不是一个坏主意 对于同时运行的两个类,有什么好的方法可以写入同一个日志文件吗?只要您控制哪个类正在从文件中读取和写入,并确保一次只有一个类可以写入日志文件,您就可以了,每次切换都可以重新读取该文件 研究使用以确保两个类不会同时访问文件 只要您控制哪个类正在读取和写入文件,并确保一次只有一个类可以写入该文件,您就应该可以了,每次切换时,您都会重新读取该文件 研究使用以确保两个类不会同时访问文件 这是一个典型的并发问题

我的Python程序中有两个类,其中一个是线程。让两个类打开同一个日志文件并写入是不是一个坏主意


对于同时运行的两个类,有什么好的方法可以写入同一个日志文件吗?

只要您控制哪个类正在从文件中读取和写入,并确保一次只有一个类可以写入日志文件,您就可以了,每次切换都可以重新读取该文件


研究使用以确保两个类不会同时访问文件

只要您控制哪个类正在读取和写入文件,并确保一次只有一个类可以写入该文件,您就应该可以了,每次切换时,您都会重新读取该文件


研究使用以确保两个类不会同时访问文件

这是一个典型的并发问题。你需要确保你准确地控制正在发生的事情。关于日志文件,最简单的解决方案可能是让一个队列从不同的地方(从不同的线程甚至进程)收集日志消息,然后让一个实体从该队列弹出消息并将其写入日志文件。这样,至少有一条消息是独立的


如果从不同的非同步实体写入文件,操作系统不会防止消息混淆。因此,如果您不明确地控制应该按哪个顺序发生什么,那么可能会导致该文件中的消息被破坏,即使大部分时间似乎都正常工作。

这是一个典型的并发问题。你需要确保你准确地控制正在发生的事情。关于日志文件,最简单的解决方案可能是让一个队列从不同的地方(从不同的线程甚至进程)收集日志消息,然后让一个实体从该队列弹出消息并将其写入日志文件。这样,至少有一条消息是独立的


如果从不同的非同步实体写入文件,操作系统不会防止消息混淆。因此,如果您不明确地控制应该按哪个顺序发生什么,那么可能会导致该文件中的消息被破坏,即使大部分时间似乎都正常工作。

使用python。它为您处理血淋淋的细节。

使用python。它可以为您处理血淋淋的细节。

谢谢这是一个非常有趣的方法,哪个类将拥有队列?假设我有classA和classB…如果classA有self.myQ,调用B如何访问它?Python中的
线程
以及
多处理
模块提供了简单的队列。没有类会“拥有”这样的队列。您可以在几个线程之间共享一个队列对象(所需的同步/锁定由Python模块在内部完成,您不必担心这一点)。然后,您可以简单地将Python对象(如字符串)从任何线程放入该队列。只有在一个线程中,您才能弹出这些对象(本例中为字符串)并将它们写入磁盘。这似乎非常有趣,您知道我可以看到的在两个类之间共享队列对象的任何示例吗?您不在类之间共享(确保获得类和实例之间的差异)。您可以说在对象之间共享一个队列。或者更简单地说,您可以在程序的不同“位置”使用相同的队列对象。这样,您就可以在程序的不同“位置”之间传输信息。这些地方可能是不同的线程。请看一下页面底部--有一个简单的示例说明如何在线程之间共享一个队列对象,并将其用作一个非常简单的同步原语。谢谢这是一个非常有趣的方法,哪个类将拥有该队列?假设我有classA和classB…如果classA有self.myQ,调用B如何访问它?Python中的
线程
以及
多处理
模块提供了简单的队列。没有类会“拥有”这样的队列。您可以在几个线程之间共享一个队列对象(所需的同步/锁定由Python模块在内部完成,您不必担心这一点)。然后,您可以简单地将Python对象(如字符串)从任何线程放入该队列。只有在一个线程中,您才能弹出这些对象(本例中为字符串)并将它们写入磁盘。这似乎非常有趣,您知道我可以看到的在两个类之间共享队列对象的任何示例吗?您不在类之间共享(确保获得类和实例之间的差异)。您可以说在对象之间共享一个队列。或者更简单地说,您可以在程序的不同“位置”使用相同的队列对象。这样,您就可以在程序的不同“位置”之间传输信息。这些地方可能是不同的线程。请看一下页面底部--有一个简单的示例,说明如何在线程之间共享一个队列对象,并将其用作一个非常简单的同步原语。@Jan Philip Gehrcke-问题是关于类和线程,而不是多处理。我想说问题是关于概念:)我同意,在线程化的情况下,
日志记录
模块对用户完全透明地解决了这个问题,这非常好。我想提供一些关于问题本身及其一般解决方案的见解。@Jan Philip Gehrcke-问题是关于类和线程,而不是多处理。我想说问题是关于概念:)我同意,在线程化的情况下,
日志记录
模块完全以透明的方式向用户解决问题,这很好。我想提供一些关于问题本身及其一般解决方案的见解。