小编mac*_*ler的帖子

在 Linux 上使用 Python 从子进程中杀死父进程

在我的(非常简化的)场景中,在 python 2.7 中,我有 2 个进程:

  1. 父进程,它在做一些任务。
  2. 子进程,X 时间后需要杀死父进程。

创建子进程:

killer = multiprocessing.Process(...)
killer.start()
Run Code Online (Sandbox Code Playgroud)

子进程在X时间后执行如下代码(代码的简化版):

process = psutil.Process(parent_pid)
...
if time_elapsed:
    while True:
        process.kill()
        if not process.is_alive:
            exit()
Run Code Online (Sandbox Code Playgroud)

问题是它让父进程成为僵尸进程,子进程永远不会退出,因为父进程还活着。

相同的代码在 Windows 中按预期工作。

我看到的所有解决方案都在谈论父进程通过调用等待子进程完成killer.join(),但在我的情况下,父进程是执行任务的人,它不应该等待它的子进程。

处理这种情况的最佳方法是什么?

python linux fork multiprocessing python-2.7

8
推荐指数
1
解决办法
4275
查看次数

每个线程的免费 TLS 指针

在 MSDN 中阅读以下页面:

在动态链接库中使用线程本地存储

我无法理解在FreeLibrary()调用的情况下谁负责释放每个线程的 TLS 插槽指向的内存。

据我了解,如果我有多个正在运行的线程,它们都会在给定索引中的 TLS 插槽内分配内存。当FreeLibrary()被调用时, onlyDLL_PROCESS_DETACH被触发,因此只有收到DLL_PROCESS_DETACH通知的线程才有机会LocalFree()在调用TlsFree()索引之前调用存储在 TLS 插槽中的自己的数据。这会导致所有没有机会调用LocalFree()其数据的其他线程发生内存泄漏,因为它们没有收到DLL_THREAD_DETACH通知。

有人可以解释应该在何时何地释放存储在每个线程的 TLS 插槽中的缓冲区吗?

c winapi multithreading thread-local-storage

6
推荐指数
1
解决办法
758
查看次数

python 日志记录模块的操作系统依赖行为

在这个问题和答案之后,我正在寻找以下问题的解决方案:

我有一个 Python 程序,应该可以在 Windows 和 Linux 上运行。

我的 python 进程生成一个子进程,它们都应该有一个文件记录器。我希望他们每个人都登录到自己的日志文件中。

流程创建:

import multiprocessing
multiprocessing.Process(target=my_target, args=(my_args,))
Run Code Online (Sandbox Code Playgroud)

日志创建:

import logging
logger = logging.getLogger()
fh = logging.FileHandler(log_file, mode="a+")
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)

在 Windows 中它工作得很好,但在 Linux 中我将子输出写入子日志和父日志中。

处理这种情况的最佳方法是什么?

python logging os-dependent multiprocessing

5
推荐指数
1
解决办法
371
查看次数

两次释放 glib 缓冲区是否安全?

释放由glib g_malloc函数分配的缓冲区两次是安全的还是禁止的?

char *buffer = g_malloc(10);
g_free(buffer);
g_free(buffer);
Run Code Online (Sandbox Code Playgroud)

c memory-management glib double-free

2
推荐指数
1
解决办法
191
查看次数

ConversationChain 与 langchain 中的上下文

我想创建一个基于langchain. 在对话的第一条消息中,我想传递初始上下文。

有什么方法可以做到呢?我正在努力解决这个问题,因为从我看来,我可以使用提示模板。从他们的例子来看:

template = """The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.

Current conversation:
{history}
Human: {input}
AI Assistant:"""
PROMPT = PromptTemplate(input_variables=["history", "input"], template=template)
conversation = ConversationChain(
    prompt=PROMPT,
    llm=llm,
    verbose=True,
    memory=ConversationBufferMemory(ai_prefix="AI Assistant"),
)
Run Code Online (Sandbox Code Playgroud)

但问题是,我处理模型的常用方法是使用SystemMessage,它为机器人提供了上下文和指导。我不确定此模板是否是langchain处理系统消息的推荐方法。如果不是,能否请您说明正确的方法?

chatbot python-3.x langchain

2
推荐指数
1
解决办法
5516
查看次数