如何在新线程维持C++ Worker对象存活并按需响应Python主线程调用
问题:多Worker线程按需响应的实现方案
现有架构与扩展需求
- 主Server基于Python开发,运行在Python环境中
- Worker由C++编写,通过Python绑定机制被Server调用,Worker实例在Server侧以Python代码创建
- 原有流程:新客户端连接时,Server分配Worker处理流式数据,Worker完成任务后响应,该过程持续进行
需要扩展为多Worker模式:
- 在现有Worker之上新增编排层,为每个Worker分配独立线程
- Server在新客户端到来时与指定线程通信,实现多客户端并发处理
核心问题
如何在新线程中启动Worker对象并保持其存活状态,同时避免空循环轮询,仅在Server发起调用时执行任务?
直接在新线程内创建Worker会导致线程执行完毕后立即退出,Worker对象随之失效;此前为验证通信可行性,曾采用空循环维持Worker存活的低效实现,但不符合按需响应的需求。
低效验证实现代码
#include <unistd.h> #include <iostream> #include <memory> #include <thread> class worker { public: int x = 3; worker(int k) : x{k} {}; void SetX(int l) { x = l; } int getX() { return x; } }; void foo(int x) { std::cout << "num=" << x << "\n"; } void printloop(std::shared_ptr<worker> s_ptr) { auto k = s_ptr.get(); while (1) { std::cout << "numb=" << k->getX() << "\n"; sleep(3); } } int main() { std::shared_ptr<worker> r = std::make_shared<worker>(2); std::thread th1(printloop, r); int i = 0; while (i < 5) { r.get()->SetX(i); sleep(1); i++; } th1.join(); std::cout << "x = " << r.get()->getX() << "\n"; return 0; }
内容的提问来源于stack exchange,提问作者satijaf
相关产品推荐
相关产品推荐

