我有一个脚本可以检查哪个MX记录属于一个电子邮件地址.我有大约30万封电子邮件需要检查.因此单线程进程需要很长时间.
我有一个队列的beanstalkd,php正在通过文件向它发送电子邮件.但是我只有一个工作人员来执行队列.我目前无法为一个过程产生10多名工人.
我运行do_job_mx.php然后打开一个只包含电子邮件的文件并将它们传递给队列.
php代码从文件中获取电子邮件并放入队列 - do_job_mx.php:
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1:11300');
$filename = '_blank.txt';
$filename = dirname(__FILE__) . '/in/' . $filename;
foreach (file($filename, FILE_SKIP_EMPTY_LINES) as $line)
{
$json = json_encode(array("email" => trim($line)));
$pheanstalk
->useTube('process_mx')
->put($json);
}
Run Code Online (Sandbox Code Playgroud)
worker的php代码 - do_worker_process_mx.php:
class Worker
{
public function __construct()
{
$this->log('worker process - starting');
require_once('pheanstalk_init.php');
$this->pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1:11300');
}
public function __destruct()
{
$this->log('worker process - ending');
}
public function run()
{
$this->log('worker process - starting to run');
while(1)
{
$job = $this->pheanstalk …Run Code Online (Sandbox Code Playgroud) 问题:
Ajax建议 - 在食谱中搜索[ n ]成分.那就是:匹配多种成分的配方.
例如:SELECT Recipes using "flower", "salt"会产生:"Pizza", "Bread", "Saltwater"等等.
表:
Ingredients [
IngredientsID INT [PK],
IngredientsName VARCHAR
]
Recipes [
RecipesID INT [PK],
RecipesName VARCHAR
]
IngredientsRecipes [
IngredientsRecipesID INT [PK],
IngredientsID INT,
RecipesID INT
]
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT
Recipes.RecipesID,
Recipes.RecipesName,
Ingredients.IngredientsID,
Ingredients.IngredientsName
FROM
IngredientsRecipes
INNER JOIN Ingredients
ON IngredientsRecipes.IngredientsID = Ingredients.IngredientsID
INNER JOIN Recipes
ON IngredientsRecipes.RecipesID = Recipes.RecipesID
WHERE
Ingredients.IngredientsName IN ('salt', 'water', 'flower')
Run Code Online (Sandbox Code Playgroud)
我目前正在使用ASP.NET C#构建我的查询,因为该WHERE子句具有动态特性.
我咬了一下,我必须在我的代码层中构建查询,而不是使用存储过程/纯SQL,理论上应该更快.
你有没有想过如何将我的代码层中的所有逻辑移动到纯SQL,或者至少我如何优化我正在做的事情的性能?
我正在考虑临时表:
第一步 …
我正在从我的网站为一些成员打开一个新的浏览器窗口.但是,有些人可能会稍后将其关闭,或者最初可能无法打开.
是否有一个相当简单的Javascript片段可以在每个页面上运行以确认是否有另一个浏览器窗口是打开的,如果没有,提供一个重新打开它的链接?
[澄清:]要检查的代码是打开的窗口将在其他页面上运行 - 而不仅仅是在打开它的同一窗口和URL中.想象一下,用户登录,窗口(尝试)打开,然后他们在相同的选项卡/窗口(或其他)中浏览一段时间,然后关闭第二个窗口(或者它从未打开) - 我希望能够注意窗口在初次尝试打开后/关闭后的一段时间内已经关闭,所以我不确定从window.open()(使用popup_window_handle.closed)检查javascript的返回是否很容易使用,或者确实可能.
我正在尝试运行beanstalk并且在尝试运行Queue :: push()时遇到异常:
Class 'Pheanstalk_Pheanstalk' not found
Run Code Online (Sandbox Code Playgroud)
我已经运行了composer require pda/pheanstalk,甚至还重新生成了我的自动加载文件.
它发生在./vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php
有任何想法吗?
这与使用Queue和QueueWorkers的laravel 5.3,beanstalk,ttr和timeout有关.TTR:https://github.com/kr/beanstalkd/wiki/faq
如果我理解正确,队列中的作业会在QueueWorker选择时保留状态.当ttr耗尽时,此作业状态将更改回准备状态.但是QueueWorker会发生什么?
假设QueueWorker通过以下命令将超时设置为600:
php artisan queue:work --tries=1 --timeout=600 --sleep=0
Run Code Online (Sandbox Code Playgroud)
默认情况下,ttr设置为60秒.
在工作期间,请求到另一个站点,并且需要120秒直到响应.60秒后,由于TTR,作业将重新设置为就绪状态.QueueWorker是否会继续工作直到收到响应,最多600秒?或者,当TTR到达时,QueueWorker是否会停止工作?
我正在使用beanstalkd托管队列.我刚刚意识到,如果队列中有作业并且beanstalkd进程重新启动或崩溃,那么作业将永远丢失(或者我认为).
有没有办法在beanstalkd失败或重启时保留队列中的作业?如果没有,最好的做法是确保工作永远不会丢失?
beanstalkd ×4
laravel ×2
php ×2
queue ×2
c# ×1
javascript ×1
laravel-5 ×1
laravel-5.3 ×1
performance ×1
pheanstalk ×1
popup ×1
sql-server ×1