php - Symfony 中的会话锁定阻止加载其他页面
问题描述
我目前正在使用 Symfony 5 构建一个非常基本的应用程序。但是我有一个问题。
当我运行持续一定时间的任务时,在任务完成之前我无法加载辅助页面。
更详细地说,我的页面上有一个名为“start process”的按钮,它调用将执行 symfony 命令(它本身执行 python 脚本)的控制器。
Le code JS rien de plus basique jusque ici
const startProcessBtn = document.querySelector('#startProcessBtn');
startProcessBtn.addEventListener('click', () =>
{
fetch('http://localhost:8000/startProcess').then(response =>
{
console.log(response);
});
});
这是我的控制器功能
/**
* @Route("/startProcess", name="startProcess")
* @param HubInterface $hub
*
* @throws \JsonException
*/
public function startProcess(KernelInterface $kernel, Request $request)
{
$request->getSession()->start();
$request->getSession()->save();
$application = new Application($kernel);
$application->setAutoExit(false);
$queue = $this->getDoctrine()->getRepository(Entity::class)->getNotProccesed();
$progress = 0;
$total = count($queue);
foreach ($queue as $queueItem)
{
$progress++;
$update = new Update('http://localhost:8000/process', json_encode(['status' => 'info', 'title' => 'Start process'], JSON_THROW_ON_ERROR));
$this->hub->publish($update);
$input = new ArrayInput([
'command' => 'command:start',
]);
$application->run($input);
$update = new Update('http://localhost:8000/process', json_encode(['status' => 'success', 'title' => 'Finish process'], JSON_THROW_ON_ERROR));
$this->hub->publish($update);
$this->getDoctrine()->getRepository(Entity::class)->setIsProccessedById($queueItem->getId());
}
return new Response('ok');
}
我已经遇到了阻止脚本执行的问题,因为脚本已经在执行中。这是由于必须关闭会话才能允许另一个脚本读取它。当时我使用了 session_write_close() 并且我的问题得到了解决,但是我在 Symfony 上,但即使使用会话并关闭它也不起作用。
问题仍然存在。
我的任务目前持续约 2 分钟,这意味着在此期间我无法同时在应用程序上执行任何操作,这些任务可能会增加到 10 分钟或更长时间。
如果有人可以帮助我,非常感谢!有一个美好的一天/晚上:-D
解决方案
推荐阅读
- javascript - Ionic Creator - 重新排序在firebase中持续存在的列表项?
- android - 如何知道使用 Retrofit 时调用了请求超时?
- python - 计算列表中元素的出现次数,直到出现不同的元素
- devexpress - Devexpress:如何在代码中设置 BarEditItem 的 EditValue
- c++ - 在 C++ 中循环读取 QML 对象(CheckBox)属性:总是相同的值
- python - 如何合并两个数据帧,其中一个数据帧具有开始时间/结束时间,另一个数据帧具有时间戳数据
- xamarin - 如何更改 Xamarin 表单的 Styles.Xml 中的默认显示警报背景颜色
- sql - 更新总和组
- python - 通过发布请求django将图像发送到服务器
- yocto - Yocto部署文件夹中的符号链接有什么用