Hallo,
wir haben Homegear auf PHP 7.4 umgestellt. Größte damit verbundene Änderung ist, dass pthreads
nicht mehr unterstützt wird und durch parallel
ersetzt wurde. Der Hauptentwickler begründet dies mit (https://github.com/krakjoe/pthreads/issues/929):
It [pthreads] is, in my opinion, broken by design, and fixing it, is simply not worth it.
parallel
findet sich auf GitHub und ist hier dokumentiert: https://php.net/parallel.
Insgesamt läuft parallel
sehr viel besser und stabiler als pthreads
. Die Umstellung lohnt sich also. Es ist allerdings sehr anders…
Auf ein paar Eigenarten sei hingewiesen:
- Als Vorlage lässt sich das OpenWeatherMap-Gerät (https://github.com/Homegear/Homegear/blob/dev/homegear-miscellaneous/misc/Device%20Description%20Files/OpenWeatherMap.xml) und die Optional-Nodes (z. B. https://github.com/Homegear/homegear-nodes-optional/blob/dev/telegram-bot/telegram-bot.s.php) verwenden.
- Eine wichtige Eigenart von
parallel
ist, dass im Thread nicht auf den umgebenden Quelltext zugegriffen werden kann. D. h. im Thread müssen z. B. Klassen wieder mitinclude
oderrequire
eingebunden werden. Es gibt auch einen funktional gleichwertigen Parameter an die Runtime-Klasse zum Bootstrapping, dieser hat bei uns aber auf Anhieb nicht funktioniert. - Weiterhin wichtig ist, dass Kanalnamen über alle aktuell laufenden Skripte hinweg einzigartig sein müssen. Sonst werden Ereignisse u. U. an andere Skripte gesendet. Homegear prüft bei jedem Skriptstart, ob dieses Skript in einem neuen Prozess ausgeführt werden muss. Es kann also sein, dass zwei Skripte in zwei unterschiedlichen Prozessen laufen (alle von einem Skript gestarteten Prozesse, Threads und eingebundenen Dateien werden aber im gleichen Prozess ausgeführt). Die Kanalkommunikation funktioniert nicht über diese Grenze hinweg. Nutzt diese Funktion also bitte ausschließlich für die Kommunikation zwischen Threads, welche von einem Skriptaufruf aus gestartet werden und keinesfalls als Feature für die Kommunikation zwischen unabhängig voneinander gestarteten Skripten.
Wir warten noch auf die Anpassungen einiger Module an parallel
, bevor PHP 7.4 in Testing und Stable aufgenommen wird. Für alle nicht öffentlichen Homegear-Module gilt, dass diese zeitnah angepasst werden müssen. Sobald Testing und Stable auf PHP 7.4 umgestellt werden, werden die Module sonst nicht mehr funktionieren. Die Testing-Version ist für Mitte Mai geplant, die Stable-Version für Ende Mai.
Fragen zu diesem Thema bitte in diesem Post.
Viele Grüße
Sathya