Не очень глобальные глобальные переменные?

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8
по форуму куча тредов которые как бы доказывают: я не один
//рассуждение
как создать общую переменную между всеми потоками и/или проектами?
по описанию это должны быть глобальные переменные, только вот нет
задав глобальную переменную в одном шаблоне нельзя получить её из другого

да, можно сделать грязь и просто хранить данные в каком-нибудь файле и синхронизировать через него, но это кажется не очень лаконичным
//задача
у меня 3 потока 1 шаблона собирают данные в один файл. другой 1 шаблон периодами работает с этим итоговым файлом.
проблема в том чтобы потоки не сливали данные в файл пока с ним идёт работа.
казалось бы очевидно - делаем глобальную переменную, если начинаем работу с файлом - переменная в 1, если в переменной 1 тогда 3 потока ждут очереди.

//вопрос
как вообще работают эти вот зеннопостерские глобальные переменные? почему нельзя изменять их между шаблонами?

документация говорит что

Глобальный счетчик - счетчик, доступ к которому возможен как из других инстансов, так и других проектов.

Может быть использован при многопоточном парсинге/постинге для работы с пагинацией.

при этом у меня поток зенки не видит переменную, вообще.
хотя мейкер видит прекрасно.
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8


казалось бы одна общая переменная, но нет, контринтуитивно
как работает - не ясно
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
нельзя задавать значения глобальное переменной в окне переменных. В таком случае это значение будет задаваться при каждом запуске потока
 
  • Спасибо
Реакции: Gfoblin

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Не очень прямые прямые руки )
Проверяй существует ли переменная - потом присваивай... а то и тут будет ошибка )
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8
нельзя задавать значения глобальное переменной в окне переменных. В таком случае это значение будет задаваться при каждом запуске потока
так а где её создавать то тогда? вроде как очевидно именно тут создавать
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8
Не очень прямые прямые руки )
Проверяй существует ли переменная - потом присваивай... а то и тут будет ошибка )
это я проверял существует ли вообще такая переменная с точки зрения другого шаблона
вот оказалось существует

руки вообще не при чем, говорю форум завален аналогичными тредами где люди как и я не понимаю почему глобальные переменные не ведут себя согласно их названию
казалось бы они должны работать как и локальные - меняться в кубиках
но при этом существовать вне измерений во всех шаблонах и потоках
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
это я проверял существует ли вообще такая переменная с точки зрения другого шаблона
вот оказалось существует

руки вообще не при чем, говорю форум завален аналогичными тредами где люди как и я не понимаю почему глобальные переменные не ведут себя согласно их названию
казалось бы они должны работать как и локальные - меняться в кубиках
но при этом существовать вне измерений во всех шаблонах и потоках
они и существуют во всех потоках. Поэтому их и нельзя инициировать в окне переменных, иначе они будут в каждом потоке по новой задавать это значение.

Вообще, работать с глобалками нужно сугубо из кода просто потому, что там можно через лок организовать очередь доступа. А иначе существует вероятность одновременного редактирования переменной из разных потоков
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8
Вообще, работать с глобалками нужно сугубо из кода просто потому, что там можно через лок организовать очередь доступа. А иначе существует вероятность одновременного редактирования переменной из разных потоков
так мне всего то нужна переменная которая оповестит дочерние потоки о то что надо немного подождать

они и существуют во всех потоках. Поэтому их и нельзя инициировать в окне переменных, иначе они будут в каждом потоке по новой задавать это значение.
и как тогда получить доступ к переменной из соседнего шаблона...
элементарно указывая {-GlobalVariable.NameSpace.IsUploading-} - возвращается нул судя по всему
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Ну там смайлы )))
Я шучу... щас покажу как делается, было это тут лет 5 назад +-
77393
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
  • Спасибо
Реакции: doc

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8

при этом в мейкере переменная вполне себе функционирует и передаётся
в зенке - нет, пустота
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

ага, так я и сделал
только вот результат считывания этой переменной в соседнем шаблоне

возвращается ничего
переменная удалена из окна переменных этих шаблонов?
 
  • Спасибо
Реакции: Gfoblin

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Хотя если шаблон стартанулся - она там должна появится?
Удали - сохрани шаб - перезапусти мейкер - глянь.
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8

1. создаём экшен который задаёт глобальной переменной значение

2. в предыдущем экшене решил сделать нагляднее, переменная создаётся в списке переменных сразу, сама

3. в соседнем шаблоне получаем переменную и записываем в локальную
4. получаем пустоту уже в зеннопостере оповещением {-Variable.isUploading-}, как на скринах выше
оно может только внутри мейкера и отдельно внутри зенки работает? так вроде у меня те же проекты и в зенку залиты
 
Последнее редактирование:

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8
слегка двинулось после перезапуска, щас проверю всё ли корректно и отпишу, мб кто так же уткнется
 

zippomode

Пользователь
Регистрация
30.10.2015
Сообщения
54
Благодарностей
4
Баллы
8
короче результат таков: глобальные переменные таки работают как надо ВРОДЕ
но при этом зеннопостер не знает о глобальных переменных мейкера, кажется
всё сработало тогда когда я сунул оба шаблона в зенку, и прогнал оба шаблона разок
просто добавления не хватило, вроде..

еще возможно помогло перезапустить зенку

спасибо всем за советы
редактирование треда видимо закрылось, так бы изменил на решено
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
зеннопостер не знает о глобальных переменных мейкера
Да, не знает - это разные программы.

Кстати, есть даже пример блокировки потоков на основе глоб. переменных (третий):
 
  • Спасибо
Реакции: SHILY

EKO

Client
Регистрация
10.07.2019
Сообщения
69
Благодарностей
9
Баллы
8
короче результат таков: глобальные переменные таки работают как надо ВРОДЕ
но при этом зеннопостер не знает о глобальных переменных мейкера, кажется
всё сработало тогда когда я сунул оба шаблона в зенку, и прогнал оба шаблона разок
просто добавления не хватило, вроде..

еще возможно помогло перезапустить зенку

спасибо всем за советы
редактирование треда видимо закрылось, так бы изменил на решено
Вы обновляете контекст данных, когда запускаете проект с начала в ПМ или ЗП при перезагрузке, поэтому переменная пропадает и кажется, что плохо работает.
Следите за контекстом данных, чтобы вам было проще, создайте свою глобальную переменную в общем коде.
Пример:
C#:
namespace Zenno.OwnCode
{
    public static class MyVariables
    {
        public static int myInt {get; set;} // Так вы создали глобальную переменую Int32 на все потоки "контекст"
        public static string myString {get; set; } // Так вы создали глобальную переменую String на все потоки "контекст"
        public static List<string> myStringList {get; set;} // Так вы создали глобальный список с типом данных String на все потоки "контекст"
    }
}
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
создайте свою глобальную переменную в общем коде.
Данный код будет доступен только в одном шаблоне.

Тут второй и третий пример, объекты доступные для всех шаблонов в постере:
Ещё вариант: синхронизация через объекты подключённой библиотеки, но предыдущих примеров должно хватать.
 
  • Спасибо
Реакции: SHILY

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)