Datastax / Cassandra模块php不能与pcntl_fork一起使用

时间:2017-03-06 14:11:02

标签: php cassandra pcntl

Datastax / Cassandra完美的单脚本工作。但我需要用pcntl_fork创建许多fork。在叉cassandra不起作用。 简单的脚本

    <?php
$cluster   = Cassandra::cluster()                 // connects to localhost by default
                 ->build();
$keyspace  = 'system';
$session   = $cluster->connect($keyspace);        // create session, optionally scoped to a keyspace
$statement = new Cassandra\SimpleStatement(       // also supports prepared and batch statements
    'SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies'
);
$future    = $session->executeAsync($statement);  // fully asynchronous and easy parallel execution
$result    = $future->get();

如果作为单个脚本运行$ result内容数据。如果我在$ future-&gt; get()上创建pcntl_fork脚本冻结。如何解决?

1 个答案:

答案 0 :(得分:0)

问题是所有子进程和父进程共享相同的底层套接字,并且php-driver没有可移植或强大的方式来处理这个问题。在您的应用程序中处理此问题的一个好方法是在fork之后连接;这是一个分叉进程的伪代码:

$cluster = Cassandra::cluster()->build();

// Perform fork

if ($pid) { // Parent process
    $session = $cluster->connect($keyspace);

    // Do parent stuff
} else { // Child process
    $session = $cluster->connect($keyspace);

    // Do child stuff
}