Mencoder.How yoluyla kerede dönüştürmek için birden fazla videoları çağıran PHP bunu sınırlamak?

4 Cevap php

Geçenlerde yeni bir sunucuya benim video script yüklü ama ben o zaman onu bitirmeden önce, başka bir deneyin ve Convery olacaktır (mencoder ile) 1 video dönüştürmek için, başlangıç ​​ve başka edeceğini görüyorum, bu nedenle 4 + dönüştürmek için çalışıyor olacak sunucu kapatmaya neden aynı anda videoları. Komut geliştirici söyledi:

"Bu bir PHP arka plan işleminde her video dönüştürür. Sunucu üzerinde PHP arka süreçlerin sayısını sınırlamak ve onları sıraya için bir yol olabilir."

Peki bu nasıl lütfen yapılır?

Selamlar

4 Cevap

Use PHP Semaphores

PHP paylaşılan sayma Semaphore kullanın ve hiçbir üzerinde bir kap ile bir sıra uygulayabilirsiniz. Paralel infaz. Semaforlar her zaman eşzamanlılık kontrolü herhangi bir form için en çok tavsiye edilen yöntemdir.

Kolayca yapılandırmak ve mencoder paralel infaz kontrol, ve de bunları sınırlayabilir bu kullanma.


Pseudocode

Begin
    init sem=MAX;

    wait(sem) //sem--, waits if sem=0, till atleast one process comes out of the critical section
    /*
    	Critical Section
    	where you execute mencoder
    */
    signal(sem)	//sem++
End

Kilit çeşit kullanın. Örneğin, böylece bir seferde sadece tek bir işlem kaynak kullanabileceğiniz bir dizin üzerindeki kilitleme dosyası kullanın.

Bu anda çalışan kodlayıcı tarafından tahliye edilecek kilit bekler kodlayıcı için bir sarıcı komut dosyası gerektirir.

Ayrıca kodlayıcı çöküyor eğer bir kilit serbest değildi algılamak için akıllı olmak, ve kilidi açmak gerekir.

Edit: My understanding of the problem was there were multiple invocations of the script, each calling mencoder. However, from the other response, it seems that it might be one invocation running all the processes in the background. Then I think the solution using Semaphores is better.

Edit: Looks like someone asked this question before:

best-way-to-obtain-a-lock-in-php

Hmmmm,

Burası harika .. .. rapor veririm ben o dürüst olmak için yapıyor `nasıl emin değilim ... denemek ve uygulamak için eşim için bekler, ama umarım yukarıdaki çözümlerden biri hile yapacak bir kez yapılır.

Selamlar

Beni affet ama değiştirilmesi gereken dosya verildi edin. Bu kodlamasıdır. Buna yukarıdaki Mentionned ne herhangi yapmak için yine de var mı?

Şimdiden teşekkürler ....

//===================================================== // Include Setup And Config
//===================================================== require_once("functions.php"); require_once($config['sitepath'].'/classes/videoencode.class.php');

//===================================================== // Passed Values
//===================================================== $filename = $argv[1]; $filename2 = $argv[2]; $id = $argv[3];

if (($filename != "") && ($filename2 != "") && ($id != "")) {
$filename_orig = $filename;

  //=====================================================
  //  Encode Video
  //=====================================================
  $encode = new VideoEncode();  
  $encode->smclass =& $smclass;
  $encode->background_convert = false;

  $encode->init($filename);

  if ( $encode->encode() ) 
  {
	  //-----------------------------------------
	  //  Delete source video
	  //-----------------------------------------
	  if ($config['delete_source_video'] == 1)
	  {
	      @unlink($config['sitepath']."/files/".$filename_orig);
		  $filename_orig = $encode->filename_new;
	  }

	  $filename = $encode->filename_new;
	  $filesize = $smclass->_get_file_size($config['sitepath'].'/files/'.$filename);
  }

  //=====================================================
  //  Media Slave Server
  //=====================================================
  if ($config['enable_slaves'])
  {
      $db->query("SELECT * FROM servers WHERE server_type = 'media' AND enabled = 1 ORDER BY RAND() LIMIT 1");
	  $serv = $db->fetch_row();

	  if ( $db->get_num_rows() )
	  {
	      $file_path = $config['sitepath']."/files/".$filename;
		  $file_orig_path = $config['sitepath']."/files/".$filename_orig;

		  require($config['sitepath'].'/classes/ftp.class.php');
		  $ftp = new FTP($serv['ftp_username'], $serv['ftp_password'], $serv['ftp_host']);
		  $ftp->smclass =& $smclass;

		  if ( $ftp->connect() )
		  { 	  
		      //-----------------------------------------
			  //  Move file to slave server
			  //-----------------------------------------
			  $ftp->put($serv['server_path']."/files/".$filename,  $file_path);

			  //-----------------------------------------
			  //  Delete original file
			  //-----------------------------------------
			  @unlink($file_path);
			  if (file_exists($file_orig_path))
			  {
				  @unlink($file_orig_path);
			  }

			  $db->query("UPDATE files SET server_id = '".$serv['server_id']."' WHERE file_id = ".intval($id)."");
		  }
	  }
  }

  //=====================================================
  //  Update                
  //=====================================================
  sleep(10);

  $db->query("UPDATE files SET file_size = '".$filesize."', file_orig = '".$filename_orig."', file = '".$filename."' WHERE file_id = ".intval($id)."");

}

>