Следующая задача.
Есть файл txt со строками, которые нужно обработать. (допустим ссылки, на которые надо перейти и что-то сделать)
Как мне организовать многопотоковое обращение и обработке данных с этого единого файла, чтобы каждая строка была обработана только одной копией хумана, а другая копия не брала эту же строку для обработки.
Допустим если вырезать сотню строк с основного файла во временный файл и работать с ним и чтобы каждая копия программа делала для себя этот временный файл. Но тогда пара одновременных запущенных копий программы могут одновременно вырезать одну и ту же сотню строк и отработать их дважды.
Как в этом плане решить задачу очень четко?
Может можно как-то пометить файл, что он открыт другой копией и запретить к нему обращение.
php я начал изучать только пару месяцев назад. Вопрос мне кажется легкий для тех, кто разбирается.
Спасибо.
Помогите запустить в несколько потоков задачу
Re: Помогите запустить в несколько потоков задачу
Может не так понял, а что мешает обычным циклом брать строки?
В первой копии программы цикл начитает брать строки с 1 по 100, вторая копия со 101 по 200-ю, и тд.
for ($j=0;$j<100;$j++)
{
$name = file("C:\Program Files\Human Emulator Advanced\DATABASE/name.txt");
$name = rtrim($name[$j]);
}
В первой копии программы цикл начитает брать строки с 1 по 100, вторая копия со 101 по 200-ю, и тд.
for ($j=0;$j<100;$j++)
{
$name = file("C:\Program Files\Human Emulator Advanced\DATABASE/name.txt");
$name = rtrim($name[$j]);
}
Re: Помогите запустить в несколько потоков задачу
Это для каждой копии программы разные скрипты?
Нужно еще удалять эти строки с файла по мере выполнения.
Я хотел чтобы один и тот же скрипт запустить на 10 программах.
Нужно еще удалять эти строки с файла по мере выполнения.
Я хотел чтобы один и тот же скрипт запустить на 10 программах.
Re: Помогите запустить в несколько потоков задачу
Я придумал решение.
Примерно так. Если какой то хуман в этой время переписывает сотню строк с файла себе в массив, значит ждем пять сек.
Код: Выделить всё
while (true){
if (file_get_contents($wait_puth)!==1){
file_put_contents($wait_puth, 1);
$buffer_links = file($file_of_links);
for ($iq=0;$iq<count($buffer_links);$iq++)
$buffer_links [$iq]=trim($buffer_links [$iq]);
for ($iq=0;$iq<100;$iq++){
$buffer [$iq]=$buffer_links [$iq];
unset ($buffer_links [$iq]);
}
$fp = fopen($file_of_links,"w");
fputs($fp, implode("\r\n",$buffer_links));
fclose($fp);
file_put_contents($wait_puth, 0);
break;
}
else
{
echo "sleep(5)<br>";
sleep(5);
}
}