Perl 多线程 : '' forks '' vs ' 'threads'' in cross platforms scripts

标签 perl

我正在尝试开发一个具有多线程功能的软件。 在 Linux 上,脚本运行良好,我使用的模块是“forks”。 换句话说,在查询数据库和类似内容时,线程之间不存在共享处理程序的问题。 一旦我尝试在 Windows(Strawberry Perl)上运行脚本,当我尝试 cpan install forks 时,它说我的操作系统(64 位)的当前版本不支持“forks 模块”。 继续,我决定使用“线程”,但我收到了以下错误,几乎可以肯定与线程之间的共享处理程序相关联。

'' 线程 1 异常终止: DBD::SQLite::db 准备失败:句柄 2 由线程 d97fe8 拥有,而不是当前线程 3a01058 (句柄不能在线程之间共享,您的驱动程序可能需要添加 CLONE 方法)在 file.pl 行180,1号线。 ''

如何解决上述问题并使脚本可以在Windows Strawberry Perl上运行?

最佳答案

一般each thread or process needs to have its own handle to the database 。在每个fork之后或每个threads::create内创建一个新句柄。

关于Perl 多线程 : '' forks '' vs ' 'threads'' in cross platforms scripts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450141/

相关文章:

perl - 从 Perl 调用系统命令

perl - 在 mojolicious 中测试 JSON PUT 请求

Perl - 将空字符串用作 false 是一种好习惯吗?

json - 确定 perl 标量是字符串还是整数

perl - 动态加载 Perl 模块

mysql - Perl DBI 使用 mysql 原生多插入能力插入多行

perl - 如何确保一次只运行一个 Perl 脚本副本?

perl - 如何区分 Perl 中的 0 和空格?

perl - 如何在运行时获取子程序的签名?

linux - 使用 perl 向调制解调器发送 AT 命令