草庐IT

阻塞队列--LinkedBlockingQueue

全部标签

php - 对 PHP 的非阻塞 Ajax 请求

我正在使用PHP从远程服务器下载一个(大)文件,此下载是通过单击网页上的下载按钮触发的。因此,当我单击网页上的下载按钮时,就会向PHP函数。该函数使用cURL触发下载。与此同时,我想使用Ajax向我的PHP站点发出其他请求。但是只要下载正在进行,所有其他Ajax请求都会显示状态Pending。所以基本上下载会阻止对PHP的所有其他请求。有什么办法可以避免这种阻塞? 最佳答案 这很可能是由于session文件被锁定所致。这是许多基于php的网络应用程序的一个非常普遍的疏忽。本质上,当您调用session_start()访问$_SESS

php - Perl 正则表达式在字符集的多个实例上阻塞

我一开始在php中使用preg_replace遇到了一些疯狂的失败,并将其归结为具有多个字符类同时使用土耳其语点缀“i”和非点缀“ı”的问题案例。这是一个简单的php测试用例:在perl中再次使用相同的测试用例:#!/usr/bin/perl$str='mi';$str=~m/m[ıi]/&&print"matchsinglenormali\n";$str='mı';$str=~m/m[ıi]/&&print"matchsingleundottedı\n";$str='misir';$str=~m/m[ıi]s[ıi]r/&&print"matchdoublenormali\n";$s

php - file_get_contents() 是阻塞函数吗?

我正在通过file_get_contents连接到一个不可靠的API。由于它不可靠,我决定将api调用放入while循环中:$resultJSON=FALSE;while(!$resultJSON){$resultJSON=file_get_contents($apiURL);set_time_limit(10);}换句话说:假设API在第三次尝试成功之前失败了两次。我是发送了3个请求,还是发送了数百个请求以适应这3秒的窗口? 最佳答案 file_get_contents(),基本上与PHP中的所有函数一样,是一个阻塞调用。

php - 如何在 Symfony 3 中实现异步队列运行方法

首先,关于我的项目的一些基本信息:我有一个使用Symfony3构建的网站。对于某些任务,我正在考虑实现以运行异步PHP方法。有些事件会占用大量时间,但其结果不需要立即显现。例如:在方法newOrder中,我有函数addUserLTV,它只执行几个步骤。客户不必等待所有步骤完成,只需在基本操作后立即获得确认-'newOrder'将添加addUserLTV到队列并立即显示确认(完成运行)。队列任务将在服务器有时间执行时运行。publicfunctionaddUserLTV($userID,$addLTV){//samecode}怎么做?在symphony3中有可能吗?

php - 让 PHP 脚本永远循环执行来自队列系统的计算作业

目前我有一个永久运行在我的服务器上的perl脚本,检查SQS以获取要计算的数据。这个脚本已经运行了大约6个月,从来没有出现过任何问题。所以,现在我想切换到PHP的CLI,让脚本永远循环。主要是因为我对PHP比较熟悉。基本上,$i="forever";while($i==="forever"){doSomething();sleep(10);}脚本将执行shell_exec("/shell_script.sh");最多可能需要2小时来处理。这会触发最大执行时间或类似时间吗?这样做“可以”吗?如果没有,有什么选择? 最佳答案 您需要确保

php - 如何使用 swiftmailer 获取电子邮件队列 ID?

当我使用telnetsmtp服务器发送电子邮件时,服务器回答我2502.0.0Ok:queuedas7A821440123E发送电子邮件时。所以我需要获取ID7A821440123E来跟踪邮件日志中的电子邮件。是否可以使用Swiftmailer获取此信息? 最佳答案 SwiftMailer是基于事件的,因此其他开发人员可以轻松扩展它。每次调用Swift_Transport上的send方法时,都会调度适当的事件。您可以使用已经开发的监听器(插件)或编写您自己的监听器,这将更加自定义。现有插件SwiftMailer已经推出了一些plug

php - 用于大规模任务调度的可扩展作业队列系统

关闭。这个问题不满足StackOverflowguidelines.它目前不接受答案。想改善这个问题吗?更新问题,使其成为on-topic对于堆栈溢出。1年前关闭。Improvethisquestion场景:TL;DR-我需要一个队列系统来根据future的时间戳而不是插入的顺序来触发作业我有一个条目的MySQL数据库,其中详细说明了需要执行的特定事件(主要包括一系列算术计算和数据库插入/更新),这些事件以基于时间戳的精确顺序排列。条目插入的时间与事件将“执行”的时间没有相关性,而是由外部因素决定的。该表还包含第二列毫秒,用于提高计时精度。该表是作业“队列”的一部分,其中包含设置为在f

PHP session 阻塞,忽略 session_write_close

我正在尝试处理来自同一浏览器session的两个几乎同时发生的请求。考虑以下最小示例:第二个请求应该导致“锁定”输出,但它总是等待第一个请求完成,然后输出“完成”。Xdebug没有运行。PHP版本为5.5。编辑:投票将其作为重复项关闭。链接的问题表明要解决此问题,请附加一个随机变量。所以我建议附加一个requestTime变量并将其设置为微秒的时间戳。 最佳答案 这种行为是可以的。如果两个请求共享同一个session并且您正在使用文件来存储session数据,则PHP需要flock()session文件以防止它被多个并发的请求破坏,

php - Laravel 4.1 邮件队列与 beantalkd 驱动程序 - "Insufficient data for unserializing"

我正在开发我的第一个Laravel应用程序,在尝试使用Mail::queue发送电子邮件来排队发送电子邮件时遇到了一个奇怪的问题。我最初使用的是sync驱动程序并且一切正常,但是现在切换到beanstalkd驱动程序后它停止发送我的电子邮件。我的配置如下:Ubuntu13.10Laravel4.1PHP5.5.3通过apt-get安装Beanstalkd1.8"pda/pheanstalk":"2.1.*"composer.json我注意到每次我运行$phpartisanqueue:work我得到:[ErrorException]Insufficientdataforunseriali

php - 如何检查 Beanstalkd 队列中的作业是否已在 Laravel 中完成

我需要检查添加到队列(Beanstalkd)的作业是否已在Laravel(Laravel5)中完成,如果完成,我需要返回更新的记录(添加到队列更新记录的任务在数据库中)。我已经添加到我的composer.json:"pda/pheanstalk":"3.*"我以这种方式将作业添加到队列中:$jobId=Queue::push('App\Class',$object->toArray(),$this->getQueueName());我使用以下函数检查作业是否完成:publicfunctionfind($queueName,$jobId,$recordId){$phean=Queue::