Perl 和 MS SQL 线程问题
Perl and MS SQL thread issue
我在 Windows 上有一个 Perl 应用程序,它使用 运行 并行的线程。每个线程访问一个 MSSQL 数据库。
我知道我不能使用 Win32::OLE
因为它不是线程安全的。
你能建议我一些其他合适的解决方案吗?
创建一个Windows服务,它将作为单线程访问数据库,Perl会使用这个服务吗?
创建另一个 Perl 应用程序 "server",它将作为单线程应用程序访问数据库,Perl 线程将使用此服务?
仅在子线程中或通过某种安全方式使用 Win32::OLE
(DBI) 库?
我不知道正确的方法是什么,也不知道有什么方法可以解决。
正如@Borodin 所建议的,为什么不使用 DBIx::Class?
它是线程安全的。也许您应该更好地解释您的应用程序访问数据库的方式。您似乎有一个 "Windows server",它是一种使用 Win32::OLE 的 Perl 模块,并且该服务器实际上与数据库对话。
DBI
除了在安装过程中使用的通常构建和测试模块外,不依赖于任何其他东西
SQL服务器没有DBD
driver(我不清楚为什么。也许有人会启发我?)所以你需要使用ODBC连接使用DBD::ODBC
driver
我不确定 DBI
在线程下的表现如何,我建议您改用 fork
,它是在 Windows 版本的 Perl 上模拟的。您将需要设置 $dbh->{AutoInactiveDestroy} = 1
以防止进程在 auto-destroying 数据库和语句句柄中不应该
我在 Windows 上有一个 Perl 应用程序,它使用 运行 并行的线程。每个线程访问一个 MSSQL 数据库。
我知道我不能使用 Win32::OLE
因为它不是线程安全的。
你能建议我一些其他合适的解决方案吗?
创建一个Windows服务,它将作为单线程访问数据库,Perl会使用这个服务吗?
创建另一个 Perl 应用程序 "server",它将作为单线程应用程序访问数据库,Perl 线程将使用此服务?
仅在子线程中或通过某种安全方式使用
Win32::OLE
(DBI) 库?
我不知道正确的方法是什么,也不知道有什么方法可以解决。
正如@Borodin 所建议的,为什么不使用 DBIx::Class?
它是线程安全的。也许您应该更好地解释您的应用程序访问数据库的方式。您似乎有一个 "Windows server",它是一种使用 Win32::OLE 的 Perl 模块,并且该服务器实际上与数据库对话。
DBI
除了在安装过程中使用的通常构建和测试模块外,不依赖于任何其他东西
SQL服务器没有DBD
driver(我不清楚为什么。也许有人会启发我?)所以你需要使用ODBC连接使用DBD::ODBC
driver
我不确定 DBI
在线程下的表现如何,我建议您改用 fork
,它是在 Windows 版本的 Perl 上模拟的。您将需要设置 $dbh->{AutoInactiveDestroy} = 1
以防止进程在 auto-destroying 数据库和语句句柄中不应该