Score:1

จะทราบได้อย่างไรว่ากระบวนการแบทช์ยังคงทำงานอยู่?

ธง lb

ฉันมีแบบฟอร์มที่มีปุ่ม 5 ปุ่ม และแต่ละปุ่มเรียกใช้แบทช์ที่แตกต่างกัน บางกระบวนการแบทช์ใช้เวลาหลายนาที ฉันต้องการบล็อกปุ่มหากกระบวนการแบทช์กำลังทำงานอยู่ เนื่องจากผู้ดูแลระบบผู้ใช้รายอื่นสามารถเข้าถึงแบบฟอร์มเดียวกันได้ และพยายามเรียกใช้แบทช์ที่กำลังทำงานอยู่ในขณะนี้สำหรับผู้ใช้รายอื่น

ฉันจะรู้ได้อย่างไรว่ากระบวนการแบทช์กำลังทำงานอยู่? ฉันลองใช้ batch_get(); แต่ทุกครั้งที่ฟังก์ชันนี้ส่งคืนอาร์เรย์ว่าง

Score:1
ธง cn

ตามที่ เอพีไอเมื่อคุณกำหนดแบทช์ คุณจะต้องระบุฟังก์ชันการเรียกกลับที่จะดำเนินการเมื่อแบทช์เสร็จสิ้น ดังนั้น แบทช์จะยังคงดำเนินต่อไปจนกว่าจะมีการเรียกกลับนี้

ตามหลักการแล้ว คำจำกัดความแบทช์ของคุณจะดำเนินการเริ่มต้น เช่น การตั้งค่าสถานะ DB ที่คุณสามารถสอบถามและหากปุ่มถูกบล็อก คุณจะไม่อนุญาตให้ใช้ปุ่ม และเมื่อดำเนินการเรียกกลับเสร็จแล้ว คุณจะปลดล็อกปุ่มอีกครั้ง

Mauricio avatar
lb flag
ขอบคุณ @jbarrio ฉันกำลังทำสิ่งนี้ตามที่คุณแนะนำ ฉันใช้ `รหัส \Drupal::state()->set('batch_import_'. $sourceId, serialize($result_source));` เพื่อตั้งค่าตัวแปร "วิ่ง" ให้ทราบ แต่แบทช์นี้เป็นแบทช์แบบโปรเกรสซีฟ ดังนั้นหากผู้ใช้ปิดแท็บนี้ แบทช์จะไม่มีวันสิ้นสุดและไม่มีวันตกในการเรียกกลับที่เสร็จสิ้น
jbarrio avatar
cn flag
พูดตามตรงฉันตอบตามที่คุณถามทุกประการ สิ่งที่คุณพูดถึงตอนนี้เป็นข้อกำหนดอื่น แต่ในสถานการณ์ใหม่ของคุณ หากผู้ใช้ปิดแท็บและแบทช์ค้าง คุณสามารถเรียกใช้ cron เพื่อล้างแบทช์ที่ค้างจากตารางและรีเซ็ตสถานะ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา